我在一个框架内有两个面板。顶部控制面板有一个菜单,有三个对象,方形,圆形和三角形。我的框架实现了顶部面板中的代码。当我从菜单中选择形状时,我现在无法在屏幕上输出形状。我已经附加了我的顶级控制面板和我的MyFrame类。感谢您的帮助,非常感谢。谢谢。
这是我的MyFrame类。
public class MyFrame extends javax.swing.JFrame implements ActionListener, ChangeListener {
public static Shapes shape1;
private JMenuItem Square;
private JMenuItem Triangle;
private JMenuItem Circle;
private jPanelTop d1 = new jPanelTop();
public MyFrame() {
initComponents();
MyControlPanel controlPanelShapes = new MyControlPanel();
controlPanelShapes.setSize(1000, 1000);
controlPanelShapes.setLocation(0, 20);
add(controlPanelShapes);
d1.setSize(400, 400);
d1.setVisible(true);
this.add(d1);
JMenuBar jBarShape = new JMenuBar();
JMenu Shape = new JMenu();
Shape.setText("Shape");
Square = new JMenuItem();
Square.setText("Square");
Shape.add(Square);
Square.addActionListener(this);
Triangle = new JMenuItem();
Triangle.setText("Triangle");
Shape.add(Triangle);
Triangle.addActionListener(this);
Circle = new JMenuItem();
Circle.setText("Circle");
Shape.add(Circle);
Circle.addActionListener(this);
jBarShape.add(Shape);
setJMenuBar(jBarShape);
}
@Override
public void stateChanged(ChangeEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void actionPerformed (ActionEvent e) {
if (e.getSource() == Circle) {
shape1 = new Circle();
d1.setCircle();
} else if (e.getSource() == Triangle) {
shape1 = new Triangle();
} else if (e.getSource() == Square) {
shape1 = new Square();
d1.setSquare();
}
}
}
这是我的jPanel类:
public class jPanelTop extends javax.swing.JPanel {
public jPanelTop() {
initComponents();
}
private int xPosition = 50;
private int yPosition = 50;
private Graphics g;
public void paintComponent() {
super.paintComponent(g);
g.drawRect(xPosition, yPosition, 70, 70);
g.drawOval(xPosition, yPosition, 70, 70);
}
public void setSquare()
{
super.paintComponent(g);
g.drawRect(xPosition, yPosition, 70, 70);
repaint();
}
public void setCircle()
{
super.paintComponent(g);
g.drawOval(xPosition, yPosition, 70, 70);
repaint();
}
}
我非常感谢任何帮助! :)谢谢!
答案 0 :(得分:3)
您的paintComponent完全错误,因为它的签名与超类的签名不匹配。它需要接受Graphics参数。你的JPanel类应该不有一个Graphics字段。
要绘制魔术,您的绘图方法必须覆盖JComponents的绘制方法。您可以通过在paintComponent方法之前添加@Override
注释来测试您实际上没有这样做。这样做,编译器会抱怨你认为实际上是覆盖的方法不是(这就是为什么经常使用这个注释是一个非常好的想法 - 你希望编译器能够帮助你编写代码可能)。如果你的方法没有覆盖super的方法,那么它永远不会被JVM调用。
此外,您不应该尝试直接在setSquare和setCircle方法中使用Graphics。请再次阅读教程,了解如何正确完成。
您需要阅读有关如何绘制的教程。关键教程链接:
在进一步评估您的代码和问题时,请考虑:
boolean drawCircle
和boolean drawSquare
,并将它们设置为false。