Рисование до нажатия кнопки - PullRequest
1 голос
/ 27 ноября 2011

У меня есть проблема, которую я пытаюсь решить часами, и я был бы рад, если бы вы могли мне помочь. Моя программа является своего рода программой для рисования графиков с Swing GUI. У меня есть класс Draw2 для рисования, переопределяющий компонент рисования. Есть класс управления для GUI. Окно управления и рисования являются отдельными JFrames-s. Я пытаюсь рисовать при нажатии кнопки, но у меня проблемы со связью между объектами. Я попытался реализовать отрисовку до нажатия кнопки с условием if в методе paintcomponent, если логическое значение true, метод должен рисовать, если нет, то не должен. Я бы изменил значение boolen на true в actionlistener кнопки и перекрасил бы окно. Как мне добраться до экземпляра Draw2 в методе DrawAction? Извините, если мой вопрос очень глупый, но я только начал изучать 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 Ответ

2 голосов
/ 27 ноября 2011

Я бы расширил createControl(frame), чтобы он также принимал Draw2 в качестве аргумента:

createControl(frame, gp).

Этот новый строитель установил бы экземпляр Draw2 внутри вашего Control класса.

public class Control extends JPanel
{
    private JButton jButton1;
    private JButton jButton2;
    private Draw2 draw;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...