【问题标题】:How the swing's BoxModel works?秋千的 BoxModel 是如何工作的?
【发布时间】:2011-02-17 08:35:39
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java swing components positioning css


    【解决方案1】:

    我会用

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

    【讨论】:

      【解决方案2】:

      首先,您首先确定应该使用哪个LayoutManager 来排列您的三个字段。 GridBagLayout 肯定会做你想做的事,但很难编程。您可以尝试使用更简单的BorderLayout,这会使您的应用程序在调整大小时看起来很奇怪。您也可以使用GroupLayout。 BoxLayout、GridLayout 和 FlowLayout 不是您想要使用的。现在您有很多选择,可以布置您的顶级元素。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多