【发布时间】:2011-02-17 08:35:39
【问题描述】:
假设我想创建一个简单的计算器。它由 3 个字段组成。显示结果的文本字段,带有复选框的字段以选择系统和带有数字的字段。
我应该为每个元素使用什么样的组件? 如何在我的窗口中定位元素? 如何在组件内定位元素(即复选框)?
这就是我想要实现的目标。
【问题讨论】:
标签: java swing components positioning css
假设我想创建一个简单的计算器。它由 3 个字段组成。显示结果的文本字段,带有复选框的字段以选择系统和带有数字的字段。
我应该为每个元素使用什么样的组件? 如何在我的窗口中定位元素? 如何在组件内定位元素(即复选框)?
这就是我想要实现的目标。
【问题讨论】:
标签: java swing components positioning css
我会用
JTextField 用于数字窗口JRadioButton 用于单选按钮,以及JButton 按钮。组件的布局应该推迟到所谓的布局管理器。 (看看Using Layout Managers。在这种情况下,GridLayout 和/或GridBagLayout 就可以了。
此代码应该可以帮助您入门:
import java.awt.*;
import javax.swing.*;
public class FrameTest {
public static void main(String[] args) {
final JFrame f = new JFrame("Frame Test");
JPanel panel = new JPanel(new GridBagLayout());
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1.0;
panel.add(new JTextField(), gbc);
JPanel numSysPanel = new JPanel(new GridLayout(1, 3));
numSysPanel.setBorder(BorderFactory.createTitledBorder("Number System"));
numSysPanel.add(new JRadioButton("oct"));
numSysPanel.add(new JRadioButton("dec"));
numSysPanel.add(new JRadioButton("hex"));
panel.add(numSysPanel, gbc);
JPanel buttons = new JPanel(new GridLayout(4, 4, 2, 2));
for (int i = 0; i < 16; i++)
buttons.add(new JButton("" + i));
panel.add(buttons, gbc);
f.setContentPane(panel);
f.pack();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
【讨论】:
首先,您首先确定应该使用哪个LayoutManager 来排列您的三个字段。 GridBagLayout 肯定会做你想做的事,但很难编程。您可以尝试使用更简单的BorderLayout,这会使您的应用程序在调整大小时看起来很奇怪。您也可以使用GroupLayout。 BoxLayout、GridLayout 和 FlowLayout 不是您想要使用的。现在您有很多选择,可以布置您的顶级元素。
使用JTextField 作为结果。为复选框使用JCheckBox,您可以在其中放置一个带有蚀刻边框的JPanel(通过JPanel.setBorder(BorderFactory.createEtchedBorder()))和一个FlowLayout。不要忘记将复选框放在CheckboxGroup 中。最后但并非最不重要的一点是使用JPanel 将JButtons 分组为,呃,按钮。使用GridLayout(5 行,4 列)排列这些按钮。
【讨论】: