我的任务是使用 Swing 在 Java 中设计一个基本的 UI,但我一直坚持布置它。我想创建类似的东西,但我尝试使用 GridBagLayout 导致了一些非常混乱的事情。任何人都可以提供一些关于如何像这样布置我的 GUI 的提示吗?
我有一个 JTabbedPane,我向其中添加了两个选项卡,并且我向这两个选项卡中的每一个添加了一个包含我的控件的 JPanel。
我的任务是使用 Swing 在 Java 中设计一个基本的 UI,但我一直坚持布置它。我想创建类似的东西,但我尝试使用 GridBagLayout 导致了一些非常混乱的事情。任何人都可以提供一些关于如何像这样布置我的 GUI 的提示吗?
我有一个 JTabbedPane,我向其中添加了两个选项卡,并且我向这两个选项卡中的每一个添加了一个包含我的控件的 JPanel。
我建议
以下是我的建议:
JPanel pTextBox
with GridLayout(3, 2) 来保存所有标签 + 文本框JPanel pButtons
带有 GridLayout(1, 3) 或 BoxLayout(horizontal) 的所有按钮JPanel pAll
带有 BoxLayout(vertical) 的 a 来保存pTextBox
,pButtons
和 Table。另请查看:http ://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html以准确比较您正在寻找的内容。
有一个组件 JTable 想要占据窗口中的所有可用空间。这意味着将需要一个 BorderLayout,其 JScrollPane 包含该 BorderLayout 的 BorderLayout.CENTER 中的 JTable。其他组件将在 BorderLayout.PAGE_START 中的另一个 JPanel 内
在这个新的 JPanel 中,没有需要垂直调整其大小的组件,所以我看不到 BorderLayout 的必要性。我会用一个垂直的 BoxLayout 来组合它。在此面板中再插入两个,一个 GridBagLayout 用于标签和文本字段,一个 FlowLayout 用于按钮,中心对齐和一些水平间隙。我更喜欢 GridLayout 的 FlowLayout insetad 按钮,因为如果您调整主面板的大小,使用 FlowLayout 按钮将保持它们之间的相同距离。
这是一些代码...我无法让 JTextFields 正确显示,因此您必须修复它。
主要的:
import javax.swing.SwingUtilities;
public class Main {
public static void main(String [] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Panel panel = new Panel();
}
});
}
}
控制板:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
public class Panel extends JPanel{
private JFrame frame;
private JLabel label1;
private JLabel label2;
private JLabel label3;
private JTextField textField1;
private JTextField textField2;
private JTextField textField3;
private JButton button1;
private JButton button2;
private JButton button3;
private JTable table;
public Panel() {
label1 = new JLabel("label1");
label2 = new JLabel("label2");
label3 = new JLabel("label3");
textField1 = new JTextField("textField1", 20);
textField2 = new JTextField("textField2", 20);
textField3 = new JTextField("textField3", 100);
button1 = new JButton("Hello");
button2 = new JButton("Goodbye");
button3 = new JButton("Love");
table = new JTable(20,20);
frame = new JFrame("My application");
frame.setSize(1000, 1000);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
this.setOpaque(true);
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.weightx = 1;
gc.weighty =1;
gc.fill = GridBagConstraints.NONE;
gc.gridx = 0;
gc.gridy = 0;
// gc.anchor = GridBagConstraints.WEST;
add(label1, gc);
gc.gridx = 2;
gc.gridy = 0;
//gc.anchor = GridBagConstraints.EAST;
add(textField1, gc);
gc.gridx = 0;
gc.gridy = 1;
//gc.anchor = GridBagConstraints.WEST;
add(label2, gc);
gc.gridx = 2;
gc.gridy = 1;
//gc.anchor = GridBagConstraints.EAST;
add(textField2, gc);
gc.gridx = 0;
gc.gridy = 2;
//gc.anchor = GridBagConstraints.WEST;
add(label3, gc);
gc.gridx = 2;
gc.gridy = 2;
//gc.anchor = GridBagConstraints.EAST;
add(textField3, gc);
gc.gridx = 0;
gc.gridy = 3;
//gc.anchor = GridBagConstraints.WEST;
add(button1, gc);
gc.gridx = 1;
gc.gridy = 3;
gc.anchor = GridBagConstraints.CENTER;
add(button2, gc);
gc.gridx = 2;
gc.gridy = 3;
// gc.anchor = GridBagConstraints.EAST;
add(button3, gc);
gc.gridx = 1;
gc.gridy = 4;
gc.anchor = GridBagConstraints.CENTER;
add(table, gc);
frame.add(this);
}
}