В принципе у меня есть класс, который действует как контейнер. Это JFrame
, у которого есть конструктор, который принимает JPanel
. Теперь я создал несколько JPanels вне класса контейнера. Я разработал их по определенным причинам, главным образом, с шаблоном проектирования MVC.Как добавить JPanel в контейнер из другого класса?
Проблема заключается в том, что всякий раз, когда я добавляю в контейнер контейнер JPanel
, из класса контейнера он отображается пустым. Ошибка компиляции отсутствует. Я не понимаю, почему это не добавит того, о чем я прошу. Я отправлю некоторый код, это контейнер:
public class MainFrame {
private JFrame mainContainer = new JFrame("Frog Checkers");
private JPanel frame = new testFrame();
public void start() {
mainContainer(frame);
}
private JFrame mainContainer(JPanel frame) {
mainContainer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainContainer.setSize(925, 608);
mainContainer.setVisible(true);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
mainContainer.setLocation(dim.width/2 - mainContainer.getSize().width
/2, dim.height/2 - mainContainer.getSize().height/2);
mainContainer.setResizable(false);
mainContainer.add(frame);
return mainContainer;
}
}
И это пример одного JPanel я пытаюсь добавить:
public class testFrame extends JPanel {
private JPanel testPanel = new JPanel()
private JButton testButton, anotherButton;
public testFrame() {
testPanel.setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
testButton = new JButton("New Button");
constraints.gridx = 0; // Location on grid
constraints.gridy = 3; // Location on grid
constraints.gridwidth = 2; // How many grids the width will consume
constraints.gridheight = 1; // How many grids the length will consume
constraints.weightx = 1.0; // for resizing
constraints.weighty = 1.0; // for resizing
constraints.anchor = GridBagConstraints.SOUTHWEST; // Where it will be anchored
constraints.ipadx = 20; // Internal padding
constraints.ipady = 20; // Inernal padding
constraints.insets = new Insets(50,50,50,50);
testPanel.add(testButton, constraints);
anotherButton = new JButton("another Button");
constraints.gridx = 0; // Location on grid
constraints.gridy = 3; // Location on grid
constraints.gridwidth = 2; // How many grids the width will consume
constraints.gridheight = 1; // How many grids the length will consume
constraints.weightx = 1.0; // for resizing
constraints.weighty = 1.0; // for resizing
constraints.anchor = GridBagConstraints.SOUTHWEST; // Where it will be anchored
constraints.ipadx = 20; // Internal padding
constraints.ipady = 20; // Inernal padding
constraints.insets = new Insets(50, 50, 120, 80);
testPanel.add(anotherButton, constraints);
}
}
Я использую GridBagLayout, потому что было сказано много, чтобы не использовать нулевой макет. Но если кто-нибудь знает способ обойтись с использованием нулевого макета, пожалуйста, поделитесь. И чтобы быть немного яснее, весь этот код работал бы, если бы у меня было все это как метод внутри класса контейнера, но я не хочу этого. Любые идеи очень приветствуются.
См. [Использование нескольких JFrames, Good/Bad Practice?] (Http://stackoverflow.com/a/9554657/418556) –