Я пытаюсь создать интерфейс программы с использованием Java Swing. У меня есть контейнер, в который я добавляю 3 панели JPanel с некоторыми компонентами. Проблема в том, что когда я расширяю фрейм, все эти 3 панели JPanel располагаются в первой строке одна за другой.
Вот мой код:
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import javax.swing.border.LineBorder;
public class GraphicRefact extends JFrame {
private Container container;
private JButton button2;
private JButton button1;
private JTextField textField01;
private JLabel label01;
private JButton button03;
private JButton button04;
private JTextField textField03;
private JLabel label03;
private JButton button02;
private JButton button01;
private JTextField textField02;
private JLabel label02;
public static void main(String[] args) {
new GraphicRefact();
}
public GraphicRefact() {
initializeComponents();
setTitle("Title");
setSize(500, 150);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
container = new JPanel();
JPanel panel01 = new JPanel();
panel01.add(label01);
panel01.add(textField01);
panel01.add(button2);
panel01.add(button1);
panel01.setBorder(new LineBorder(Color.BLACK, 3));
container.add(panel01);
JPanel panel02 = new JPanel();
panel02.add(label02);
panel02.add(textField02);
panel02.add(button02);
panel02.add(button01);
container.add(panel02);
JPanel panel03 = new JPanel();
panel03.add(label03);
panel03.add(textField03);
panel03.add(button03);
panel03.add(button04);
container.add(panel03);
add(container);
}
private void initializeComponents() {
button1 = new JButton("Open");
button2 = new JButton("Close");
textField01 = new JTextField("Choose the path...");
label01 = new JLabel("Choose File: ");
button01 = new JButton("Button01");
button02 = new JButton("Button02");
textField02 = new JTextField("Choose the path...");
label02 = new JLabel("Choose Dir:");
button03 = new JButton("Button03");
button04 = new JButton("Button03");
textField03 = new JTextField("Choose the path...");
label03 = new JLabel("Choose Dir:");
}
}
Вот как выглядит программа до и после того, как я растягиваю фрейм.
До:
После:
Итак, даже после того, как я расширю фрейм, я хочу, чтобы программа оставила эти 3 панели JPanel в середине cotainer'а.
Спасибо!
Не используйте FlowLayout JPanel по умолчанию, а вложите каждую JPanel в более мощный макет. Вы можете найти руководство по управлению компоновкой здесь: Руководство по Layout Manager, а также ссылки на учебные материалы по Swing и другие ресурсы Swing здесь: Информация о качелях.




Вы должны использовать правильный LayoutManager. Посмотрите там примеры. BoxLayout кажется тем, что вам нужно.
Я не вижу, где вы определили какие-либо позиции для чего-либо, если вам нужно прочитать, как это делается, вы можете начать здесь
Встроенный менеджер компоновки java swing не так полезен. Вы должны использовать это
frame.setLayout(null);
component.setLocation(x, y);
frame.add(component);
Привет, добро пожаловать в SO :) Обратите внимание, что абсолютное позиционирование компонентов на самом деле не рекомендуется. Как уже упоминалось, Swing разработан для использования с LayoutManagers, который может плавно управлять размером и позиционированием компонентов независимо от размера и разрешения экрана.
Вы можете установить Макет сетки и поместить внутрь эти элементы.
JPanel jp = new JPanel();
GridLayout gl = new GridLayout(3,4); //3 rows, 4 columns
jp.setLayout(gl);
После этого просто разместите элементы внутренний макет по порядку.
jp.add(label1);
jp.add(button1);
//etc...
Попробуйте что-нибудь вроде ..
container = new JPanel(new GridLayout(0,1));