Я пишу простое приложение на Java, которое выполняет некоторые моделирование частиц на кучке овец (не спрашивайте). Для этого я хочу окно с JPanel для графики (которое будет изменяться с помощью простого combobox, содержащего некоторые стандартные разрешения) и некоторые другие элементы, такие как кнопки для запуска и приостановки имитации и т. Д.Неверная упаковка JFrame с использованием JPanel в borderlayout
Мой вопрос: я используя метод JFrame.pack, чтобы собрать все красиво вместе с помощью borderLayout. Но по какой-то причине JPanel упакован неправильно, похоже, что упаковка игнорирует его, поэтому размер окна изменяется, чтобы соответствовать размеру только двух кнопок, которые у меня есть сейчас. Что я делаю не так?
Это код до сих пор (немного новичка, так что никаких комментариев по моей тупости, если нет какой-либо;)):
public class Window {
public Sheepness sheepness;
public ButtonPanel buttonPanel;
public PaintPanel paintPanel;
public JFrame frame;
public Window(Sheepness sheepness, int width, int height) {
this.sheepness = sheepness;
frame = new JFrame("Sheepness simulation");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.setSize(width, height);
BorderLayout frameLayout = new BorderLayout();
JPanel background = new JPanel(frameLayout);
background.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
buttonPanel = new ButtonPanel(this);
background.add(BorderLayout.SOUTH, buttonPanel.buttonBox);
paintPanel = new PaintPanel(this);
paintPanel.setSize(600, 600);
background.add(BorderLayout.CENTER, paintPanel);
frame.getContentPane().add(background);
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
}
}
public class PaintPanel extends JPanel {
public Window window;
public PaintPanel(Window window) {
this.window = window;
}
@Override
public void paintComponent(Graphics g) {
g.setColor(Color.blue);
g.fillRect(0, 0, 300, 200);
}
}
public class ButtonPanel {
public Window window;
public Box buttonBox;
public JButton startButton;
public JButton resetButton;
public ButtonPanel(Window window) {
this.window = window;
buttonBox = new Box(BoxLayout.X_AXIS);
startButton = new JButton("Start");
startButton.addActionListener(new startButtonListener());
buttonBox.add(startButton);
resetButton = new JButton("Reset");
resetButton.addActionListener(new resetButtonListener());
buttonBox.add(resetButton);
}
}
Я прояснил теги на ваш вопрос, надеюсь, вы не против. –
Спасибо, полностью забыл о java и swing тегах. – FinalArt2005