У меня есть проблема, которую я пытаюсь решить часами, и я был бы рад, если бы вы могли мне помочь. Моя программа является своего рода программой для рисования графиков с 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);
}
Заранее спасибо