我认为您需要回到基础…
这行不通…
fp.setBackground("white");Component#setBackground不使用a
String作为参数,而是使用
Color
您的所有
addItemListener通话都无法正常进行,因为您尚未实现
ItemListener
我不确定您希望通过此操作实现什么…
@Overridefp.dRect();
但这是行不通的。@Override用于指示某个方法已被祖先覆盖,您只是在调用该方法
FigurePanel
Java和C和C ++一样,区分大小写。
没有这样的课程
itemEvent…
ItemEvent
public void ItemStateChanged(itemEvent e) {没有这样的课程
graphics,
Graphics
public void paintComponent(graphics g) {而且我什至不会尝试猜测您希望通过以下方式实现的目标…
public void paintComponent(graphics g) { super.paintComponent(g); dLine() { g.drawLine(10, 10, 160, 10); } dRect() { g.drawRect(10, 10, 150, 50); } dOval() { g.drawOval(10, 10, 150, 50); } fill() { g.setColor(Color.GREEN); if (rect.isSelected()) { g.fillRect(10, 10, 150, 50); } else if (oval.isSelected()) { g.fillOval(10, 10, 150, 50); } } erase() { g.setColor(Color.WHITE); if (rect.isSelected()) { g.fillRect(10, 10, 150, 50); } else if (oval.isSelected()) { g.fillOval(10, 10, 150, 50); } }}Java不支持“内联方法”(或您想调用的任何方法),并且不支持,使它们成为方法也将无法实现您想要的工作…
实际上,您做得很好的一件事就是重写
paintComponent并调用了
super.paintComponent……做得好:D!
更新
我鼓励您通读…
- Java Trail,特别是那些涉及基础知识的东西,尤其是那些涉及继承的东西
- 定制画
- 2D图形
更新了可能的运行示例
import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.EventQueue;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Shape;import java.awt.event.ActionEvent;import java.awt.geom.Ellipse2D;import java.awt.geom.Line2D;import java.awt.geom.Rectangle2D;import javax.swing.AbstractAction;import javax.swing.ButtonGroup;import javax.swing.Jframe;import javax.swing.JPanel;import javax.swing.JRadioButton;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException;public class DrawShapes { public static void main(String[] args) { new DrawShapes(); } public DrawShapes() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } Jframe frame = new Jframe("Testing"); frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new DrawPane()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class DrawPane extends JPanel { public DrawPane() { setLayout(new BorderLayout()); RenderPane rp = new RenderPane(); add(new ControlsPane(rp), BorderLayout.NORTH); add(rp); } } public class ControlsPane extends JPanel { public ControlsPane(RenderPane rp) { JRadioButton[] btns = new JRadioButton[4]; btns[0] = new JRadioButton(new LineAction(rp)); btns[1] = new JRadioButton(new RectangleAction(rp)); btns[2] = new JRadioButton(new OvalAction(rp)); btns[3] = new JRadioButton(new ClearAction(rp)); ButtonGroup bg = new ButtonGroup(); for (JRadioButton btn : btns) { bg.add(btn); add(btn); } } } public class RenderPane extends JPanel { private Shape shape; @Override public Dimension getPreferredSize() { return new Dimension(400, 400); } public void setShape(Shape shape) { this.shape = shape; repaint(); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); if (shape != null) { g2d.setColor(Color.RED); g2d.draw(shape); } g2d.dispose(); } } public class LineAction extends AbstractRenderAction { public LineAction(RenderPane renderPane) { super(renderPane); putValue(NAME, "Line"); } @Override public Shape getShape() { return new Line2D.Float(0f, 0f, getRenderPane().getWidth(), getRenderPane().getHeight()); } } public class RectangleAction extends AbstractRenderAction { public RectangleAction(RenderPane renderPane) { super(renderPane); putValue(NAME, "Rectangle"); } @Override public Shape getShape() { return new Rectangle2D.Float(10, 10, getRenderPane().getWidth() - 20, getRenderPane().getHeight() - 20); } } public class OvalAction extends AbstractRenderAction { public OvalAction(RenderPane renderPane) { super(renderPane); putValue(NAME, "Oval"); } @Override public Shape getShape() { float radius = Math.min(getRenderPane().getWidth() - 20, getRenderPane().getHeight() - 20); return new Ellipse2D.Float(10, 10, radius, radius); } } public class ClearAction extends AbstractRenderAction { public ClearAction(RenderPane renderPane) { super(renderPane); putValue(NAME, "Clear"); } @Override public Shape getShape() { return null; } } public abstract class AbstractRenderAction extends AbstractAction { private RenderPane renderPane; public AbstractRenderAction(RenderPane renderPane) { this.renderPane = renderPane; } public RenderPane getRenderPane() { return renderPane; } public abstract Shape getShape(); @Override public void actionPerformed(ActionEvent e) { getRenderPane().setShape(getShape()); } }}


