我有一个问题,我想解决几个小时,如果你能帮助我,我会很高兴。我的程序是一种带有Swing GUI的图形绘制程序。 我有一个Draw2类用于绘制,覆盖paintcomponent。 GUI有一个控件类。控件和绘图窗口是单独的JFrames-s。我想要做的是按下按钮点击,但我遇到了对象之间的通信问题。 我试图在paintcomponent方法中使用if条件实现绘图按钮单击,如果布尔值为true,则方法应绘制,如果不是,则不应该绘制。我会在按钮的actionlistener中将boolen更改为true并重新绘制窗口。如何在DrawAction方法中到达Draw2的实例?对不起,如果我的问题非常愚蠢,但我刚开始学习Java。 (我在这里看过类似的话题,但我没有真正理解那里的答案)所以我的代码的相关部分:
public class Draw2 extends JPanel{
boolean toDraw;
public void paintComponent (Graphics g) {
super.paintComponent(g);
if (toDraw == true){
//Draw Graph
}
}
}
public class Control extends JPanel{
private JButton jButton1;
private JButton jButton2;
void createControl(){
JButton1 = new JButton("Draw");
jButton1.addActionListener(new DrawAction());
//Other JTextfields, JComboBoxes, etc. with groupLayout
}
//inner class:
public class DrawAction implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
//How should I change toDraw in the instance of Draw2
//repaint the "canvas"
}
}
}
public static void main(String[] args){
JFrame frame = new JFrame("Control");
JFrame frame2 = new JFrame("Draw");
Draw2 gp = new Draw2();
control cont = new control();
cont.createControl(frame);
gp.setPreferredSize(new Dimension(0,0));
//Control Frame
frame.setSize(800,330);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(cont, BorderLayout.NORTH);
frame.setVisible(true);
//Drawing Frame
frame2.setSize(800,600);
frame2.setLocation(0, 330);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.add(gp);
frame2.setVisible(true);
}
提前致谢
答案 0 :(得分:2)
我会扩展createControl(frame)
所以它也需要Draw2
作为参数:
createControl(frame, gp)
。
这个新的构建器方法会在Draw2
类中设置Control
的实例。
public class Control extends JPanel
{
private JButton jButton1;
private JButton jButton2;
private Draw2 draw;