【问题标题】:How to set size of JButton?如何设置 JButton 的大小?
【发布时间】:2013-08-14 14:53:52
【问题描述】:

我正在尝试设置 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);

有什么建议吗?

【问题讨论】:

标签: java swing jbutton layout-manager preferredsize


【解决方案1】:
  getContentPane().setLayout(null);
  //setBounds(x,y,width,height)
  btnNewButton.setBounds(10,10,250,100);
  getContentPane().add(btnNewButton);

【讨论】:

  • null 布局有时间和地点,恕我直言,我不认为这是其中之一
  • 比@MadProgrammer 更进一步:不管有什么问题,null layout is not the solution
  • @kleopatra 我很好:P
  • @kleopatra 是的,只是再次阅读该主题并微笑。潮流对我不利,直到您在回复中注入了新的常识。 :)
  • @AndrewThompson 如果你当时是 #793415,我可能不会跳到中间 :-) 那里又发生了什么事?
【解决方案2】:

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

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

}

【讨论】:

  • 是的,它有效,谢谢。来自大家的大力支持。很棒的一个。
  • 很抱歉碰到一个老问题,但这让我很烦。我在谷歌上搜索确切的问题。为什么在 JPanel 中添加按钮会阻止它被拉伸? JPanel 仍然被添加到 BorderLayout 的 SOUTH 位置,除了首先将按钮添加到面板之外,其他一切都基本相同。什么给了?
  • @Ftahir192 JPanel 本身使用FlowLayout,这意味着当JPanel 被拉伸时,按钮不是;)
  • 嗯,有道理,谢谢。如果 JPanel 不支持 FlowLayout,如何更改其布局?
  • 与更改 ContainersetLayout 的布局管理器的方式相同。更多详情请见Laying Out Components Within a Container
猜你喜欢
  • 2014-11-14
  • 1970-01-01
  • 2011-06-29
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 2015-07-11
相关资源
最近更新 更多