Дело вот в чём. Есть два окна FrameBox - Отображает кнопки. FrameAddBut - Добавляет новую кнопку.
Так первым делом запускается FrameBox.
В FrameBox есть панель panelBut (В эту панель мы какраз таки и добавляем кнопки).
Дальше по нажатию запускается окно FrameAddBut.
Нажимаем на кнопку AddBut ииии тут вопрос как быть дальше как обратится к FrameBox не создавая экземпляр класса??
Статический метод я пробовал.
Проблема в том что метод revalidate(); не статический.
Код
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class FrameBox extends JFrame {
private int i;
private JPanel panelBut = new JPanel();
public void goGUI(){
JButton button = new JButton("Открыть FrameAddBut");
button.addActionListener(new ClicAdd());
panelBut.add(button);
panelBut.setLayout(new BoxLayout(panelBut, BoxLayout.Y_AXIS));
add(panelBut);
setSize(600, 400);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String args[]) {
FrameBox testAddElement = new FrameBox();
testAddElement.goGUI();
}
public void AddBut(){
panelBut.add(new JButton("Button " + i));
i++;
revalidate();
}
class ClicAdd implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("add");
FrameAddBut panelTest = new FrameAddBut();
panelTest.GUI();
}
}
}
Код
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class FrameAddBut extends JFrame {
public void GUI(){
JButton button = new JButton("Add But");
button.addActionListener(new ClicAdd());
add(button);
pack();
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
setVisible(true);
}
class ClicAdd implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
FrameBox panelBox = new FrameBox();
panelBox.AddBut();
dispose();
}
}
}