绘制到按钮单击

时间:2011-11-26 21:55:59

标签: java swing

我有一个问题,我想解决几个小时,如果你能帮助我,我会很高兴。我的程序是一种带有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);        
}

提前致谢

1 个答案:

答案 0 :(得分:2)

我会扩展createControl(frame)所以它也需要Draw2作为参数:

createControl(frame, gp)

这个新的构建器方法会在Draw2类中设置Control的实例。

public class Control extends JPanel
{
    private JButton jButton1;
    private JButton jButton2;
    private Draw2 draw;