如何设置JButton的大小?

4

我正在尝试设置JButton的大小,但默认情况下它会占据整个框架,尽管可以轻松设置其高度,但无法设置其宽度,而且我不知道为什么会出现这种行为。

我的代码:

    JButton btnNewButton = new JButton("");
    btnNewButton.setPreferredSize(new Dimension(32,0));
    ImageIcon icon = new    ImageIcon(this.getClass().getResource("/images/images_Left.png"));
    btnNewButton.setIcon(icon);
    boxTlacitek.add(btnNewButton);
    getContentPane().add(btnNewButton, BorderLayout.NORTH);

任何建议吗?

你可能会发现这个链接很有用,它提供了许多关于Swing组件大小/位置相关问题的答案,就像这个问题一样。http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html - ps-aux
2个回答

7
改变布局。尝试将按钮添加到另一个JPanel,然后将面板添加到框架中。当组件放置在NORTHSOUTH位置时,BorderLayout会将按钮跨越面板的可用宽度拉伸。

enter image description here

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestBorderLayout {

    public static void main(String[] args) {
        new TestBorderLayout();
    }

    public TestBorderLayout() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JButton fat = new JButton("Fat");
                JButton skinny = new JButton("Skinny");

                JPanel buttonPane = new JPanel();
                buttonPane.add(skinny);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(fat, BorderLayout.NORTH);
                frame.add(buttonPane, BorderLayout.SOUTH);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

是的,它有效,谢谢。大家都提供了很好的支持,真是太棒了。厉害! - Java Curious ღ
抱歉打扰了一个旧问题,但这让我很困扰。我正在谷歌搜索确切的问题。为什么在JPanel中添加按钮会阻止它被拉伸?JPanel仍然被添加到BorderLayout的SOUTH位置,除了首先将按钮添加到面板之外,一切都基本相同。这是怎么回事? - user3186023
@Ftahir192 JPanel 本身使用 FlowLayout,这意味着当 JPanel 被拉伸时,按钮不会被拉伸 ;) - MadProgrammer
啊,明白了,谢谢。如果不喜欢FlowLayout,怎么改变JPanel的布局呢? - user3186023
像改变 Container 的布局管理器一样,使用 setLayout 方法来进行布局更改。更多详情请参阅 Laying Out Components Within a Container - MadProgrammer

-1
  getContentPane().setLayout(null);
  //setBounds(x,y,width,height)
  btnNewButton.setBounds(10,10,250,100);
  getContentPane().add(btnNewButton);

在编程中,null布局有时候是必要的,但在我看来,这并不是其中之一。 - MadProgrammer
3
比@MadProgrammer更进一步:无论问题是什么,空布局不是解决方案 - kleopatra
@kleopatra 我只是太好了 :P - MadProgrammer
@kleopatra 是的,我刚刚又读了一遍那个帖子,感到很开心。在你注入新鲜的常识回复之前,潮流一直对我不利。 :) - Andrew Thompson
我不知道为什么Prabhakaran的答案被投票否决,但这确实是正确的答案。使用null布局可以完全控制窗体上控件的位置和大小。实际上,当我搜索如何手动设置Java窗体上的控制元素的位置和大小时,这正是我在寻找的东西。这是最好的答案。没有充分的理由让计算机强制设置窗体上控件的大小和位置。对于那些不想担心如何编程排列自己表单上的控件的人来说,这只是懒惰的编程。 - user4015908
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接