关于 Java swing Box 的使用问题

2019-01-08 00:51:41 +08:00
 chenqh

代码

import javax.swing.*;
import java.awt.*;

public class C5Ex1_2 {
    final static int WIDTH = 400;
    final static int HEIGHT = 400;
    public C5Ex1_2() {
        JFrame jf = new JFrame("program 1");
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(WIDTH, HEIGHT);
        JPanel panel = new JPanel();
        jf.setContentPane(panel);
        panel.setLayout(new BorderLayout());

        Box vbox = Box.createVerticalBox();
        // panel.setLayout(vbox);
        panel.add(vbox, BorderLayout.CENTER);
        Box hBox=Box.createHorizontalBox();
        hBox.setSize(WIDTH, 20);
        JTextField tf_out = new JTextField(15);
        tf_out.setMaximumSize(tf_out.getPreferredSize());
        hBox.add(tf_out);
        vbox.add(hBox);
        String[] names  = {
            "1", "2", "3", "%", "ON",
            "4", "5", "6", "=", "AC",
            "7", "8", "9", ".", "+/-",
            "0", "+", "-", "*", "C"
        };
       hBox = null;
        for(int i=0;i<names.length;i++) {
            if(i%5==0) {
                // if(hBox != null) {
                //     hBox.setMaximumSize(hBox.getPreferredSize());
                //     System.out.println("size:" + hBox.getSize() + ":i=" + i);

                // }

                
                System.out.println("i="+i);
                hBox = Box.createHorizontalBox();
                Dimension size = new Dimension(400, 40);
                hBox.setPreferredSize(size);
                vbox.setBackground(Color.red);
                vbox.add(hBox);
            }
            JButton btn = new JButton(names[i]);
            Dimension preferSize = new Dimension(50, 40);
            btn.setPreferredSize(preferSize);
            // btn.setSize(50, 40);
            hBox.add(btn);
            System.out.println("hBox" + hBox);
        }

        jf.setVisible(true);
    }
    public static void main(String[] args) {
        new C5Ex1_2();
    }
}

显示结果

为什么感觉 Box 越来越小了?还是 btn 设置大小不起做用?

1212 次点击
所在节点    问与答
9 条回复
nekolr
2019-01-08 08:24:03 +08:00
别 swing 了,上 java fx 吧
jcsmallming
2019-01-08 14:09:52 +08:00
事实上你并没有设置按钮的大小,这里按钮的大小是根据按钮上的数字自动调整的,你可以试试把按钮的文字全部换成同一个数字验证下,就能完全对齐了
chenqh
2019-01-08 16:13:15 +08:00
@jcsmallming btn.setPreferredSize(preferSize);这个不能设置按钮大小吗?
chenqh
2019-01-08 16:14:07 +08:00
@nekolr javafx 资料比 swing 还少。。如果要追新,我还不如用 electron
jcsmallming
2019-01-08 16:51:08 +08:00
@chenqh

JButton btn = new JButton(names[i]);
Dimension preferSize = new Dimension(50, 40);
btn.setPreferredSize(preferSize);
改成
JButton btn = new JButton(names[i]);
Dimension preferSize = new Dimension(50, 40);
btn.setBorder(BorderFactory.createRaisedBevelBorder());
btn.setMaximumSize(preferSize);
btn.setPreferredSize(preferSize);
这样子就可以了
chenqh
2019-01-08 16:52:43 +08:00
@jcsmallming 谢谢
jcsmallming
2019-01-08 16:53:26 +08:00
@chenqh
改了之后的效果显示应该是正常的
像这样
jcsmallming
2019-01-08 16:55:22 +08:00
@chenqh 不用客气,能帮上忙就好
chenqh
2019-01-08 16:57:52 +08:00
@jcsmallming 我就需要这样的效果,大佬 NB

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/524817

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX