javagui,使用jframe具有两列布局

kq4fsx7k  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(497)

我正在学习JavaGUI和布局。
我的电流输出是这样的
电流输出:

但是我想让列表视图和左边的一个按钮,和右边的其他组件像这样
结果输出应如下所示:

我试图通过添加borderlayout将其分为两列,例如,

JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());

//List on the left side
String[] tests = new String[] { "test1", "test2", "test3", "test4", "test5" };
JList<String> list = new JList<String>();
list.setListData(tests);
list.setSelectionBackground(Color.BLUE);
list.setSelectionForeground(Color.WHITE);
list.setFixedCellWidth(100);
frame.add(list, BorderLayout.WEST);
//List on the left side

//All Components on the right Side
JPanel namePanel = new JPanel();
JPanel emailPanel = new JPanel();
JLabel nameLabel = new JLabel("Name");
JLabel emailLabel = new JLabel("Email");
JTextField name = new JTextField(10);
JTextField email = new JTextField(10);

namePanel.add(nameLabel);
namePanel.add(name);
emailPanel.add(emailLabel);
emailPanel.add(email);
frame.add(namePanel, BorderLayout.EAST);
frame.add(emailPanel, BorderLayout.EAST);

// CheckBox Panel
JPanel checkBoxPanel = new JPanel();
JLabel lblHobby = new JLabel("Programming Language:");

// CHECKBOX LIST
JCheckBox check1 = new JCheckBox("Java");
JCheckBox check2 = new JCheckBox("C++");
JCheckBox check3 = new JCheckBox("C");
JCheckBox check4 = new JCheckBox("Python");
JCheckBox check5 = new JCheckBox("Other");
checkBoxPanel.add(lblHobby);
checkBoxPanel.add(check1);
checkBoxPanel.add(check2);
checkBoxPanel.add(check3);
checkBoxPanel.add(check4);
checkBoxPanel.add(check5);
frame.add(checkBoxPanel, BorderLayout.EAST);
// CheckBox Panel

// BUTTON
JButton saveButton = new JButton("Save");
JButton newButton = new JButton("New");
frame.add(saveButton, BorderLayout.EAST);
frame.add(newButton, BorderLayout.EAST);
// BUTTON

//Set size, title and visible
frame.setSize(500, 400);
//frame.setResizable(false);
frame.setTitle("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

为了在gui中创建两列,我需要做什么?

bq3bfh9z

bq3bfh9z1#

这就是我如何布局这个gui:

从内到外,这些布局将是: GREEN - FlowLayout 中间的一个从顶部居中,另外两个左对齐。 PINK -a GridBagLayout . 2列下至 Text field2: ,其后为单列。 RED -a BorderLayout 名单在 LINE_START 、田地和 Save / New 中的按钮 CENTER ,以及 PAGE_END .
虽然有可能用一个网格包布局创建整个视图,但这不会导致上述“分而治之”方法产生易于维护的代码。

iq0todco

iq0todco2#

frame.setLayout(new FlowLayout());

不要改变布局。flowlayout只是将组件从一行流到另一行。尝试将框架调整得更宽,看看组件是如何从一行到另一行进行 Package 的。
框架内容窗格的默认布局管理器是 BorderLayout . 你通常想要保留它,除非你有充分的理由改变它。
然后将gui设计成逻辑面板。每个面板可以使用不同的布局管理器。阅读有关布局管理器的swing教程。
因此,您可以将jlist添加到框架的左侧:

JList<String> list = new JList<>(...);
JScrollPane scrollPane = new JScrollPane( list );
frame.add(scrollPane, BorderLayout.LINE_START);

然后创建要添加到中心的面板:

JPanel center = new JPanel(...);
center.add(...);
frame.add(center, BorderLayout.CENTER);

因此,为中心选择一个布局管理器。也许您使用boxlayout,然后为每行组件添加子面板。

相关问题