swing的BoxModel如何工作?

时间:2010-05-09 11:42:23

标签: java swing components positioning css

假设我想创建一个简单的计算器。它由3个领域组成。显示结果的文本字段,带选择系统的复选框的字段和带数字的字段。

我应该为每个元素使用哪种组件? 如何在窗口中定位元素? 如何在元件内定位元素(即复选框)?

这就是我想要实现的目标。

http://img28.imageshack.us/img28/7691/lab8c.jpg

2 个答案:

答案 0 :(得分:2)

我会用

  • 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);
    }
}

enter image description here

答案 1 :(得分:0)

首先,您首先要确定您应该使用哪个LayoutManager来安排您的三个字段。 GridBagLayout肯定会做你想要的,但很难编程。您可以尝试使用更简单的BorderLayout,这将使您的应用程序看起来很奇怪,同时调整大小。您也可以使用GroupLayoutBoxLayoutGridLayoutFlowLayout不是您想要使用的。现在你有很多选择,可以列出最重要的元素。

使用JTextField获得结果。使用JCheckBox作为复选框,您可以在其中放置一个带有蚀刻边框的JPanel(通过JPanel.setBorder(BorderFactory.createEtchedBorder()))和FlowLayout。不要忘记将复选框放在CheckboxGroup中。最后但并非最不重要的是使用JPanelJButton分组为,按钮。使用GridLayout(5行,4列)排列这些按钮。