【问题标题】:How to adjust buttons' text to buttons' size - Java's Swing如何将按钮的文本调整为按钮的大小 - Java 的 Swing
【发布时间】:2013-09-21 03:15:17
【问题描述】:

我正在尝试使用包含编号按钮的网格创建一个简单的 GUI。 问题是,按钮的文本不会根据按钮的大小自行调整。

让我先给你看一下代码,这样你就会明白我的意思了:

import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class SimpleGUI implements ActionListener {
    
    private JFrame frame;
    private JPanel grid;
    private JButton[] buttons;
    
    public SimpleGUI() {
        frame=new JFrame("Buttons grid");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        
        grid=new JPanel();
        buttons=new JButton[100];
        
        
        for (int i=0; i<buttons.length; i++) {
            buttons[i]=new JButton(Integer.toString(i+1));
            buttons[i].setActionCommand(Integer.toString(i+1));
            grid.add(buttons[i]);
            buttons[i].addActionListener(this);
        }
        
        frame.getContentPane().add(grid);
    }
    
    public static void main(String[] args) {
        SimpleGUI gui=new SimpleGUI();
        gui.go();
    }
    
    
    public void go() {
        grid.setLayout(new GridLayout(10,10));
        
        frame.setSize(500,500);
        frame.setVisible(true);
    }


    public void actionPerformed(ActionEvent e) {
        String buttonNum=e.getActionCommand();
        System.out.println("You've pressed "+buttonNum);
    }
    
}

按钮太小,无法容纳文本,因此按钮上会出现三个点,而不是数字。 (...) 只有当我展开窗口(从而相应地扩大按钮的尺寸)时,数字才会正确显示在按钮上。 有没有办法让文本根据按钮的尺寸自行调整,以便始终可见?

【问题讨论】:

    标签: java swing user-interface jbutton layout-manager


    【解决方案1】:

    确实可以为按钮内的文本提供更多空间。文本周围的额外空白空间由边距控制,并且可以更改:

    button.setMargin(new Insets(0, 0, 0, 0));
    

    如果你想让按钮默认为方形,你可以覆盖它们的首选大小:

    buttons[i] = new JButton(Integer.toString(i + 1)) {
        @Override
        public Dimension getPreferredSize() {
            Dimension naturalSize = super.getPreferredSize();
            int sideLength = Math.max(naturalSize.width, naturalSize.height);
            return new Dimension(sideLength, sideLength);
        }
    };
    

    然后,当使用pack()(根据 Andrew Thompson 的回答,您应该使用它)时,初始布局将是方形的。

    编辑:更改了首选尺寸以考虑按钮的正常首选尺寸。 (再次感谢 A. Thompson)。

    【讨论】:

    • @AndrewThompson 好吧,解决问题的主要挑战是找到正确的问题。从提供的 sscce 的外观(耶!有人给了一个),我决定提供更多信息。您的问题可能解决了实际问题,其余的只是样本的产物。
    • 非常感谢你们的帮助。 kiheru - 我不知道你可以覆盖这样的方法......我认为如果你想覆盖其中一个方法,你必须扩展一个类......
    • @so.very.tired 不客气。这是一个匿名类,你可以从优秀的java tutorial中阅读更多关于它们的信息
    【解决方案2】:

    进行如下所示的更改。

    public void go() {
        grid.setLayout(new GridLayout(10,10));
    
        //frame.setSize(500,500);
        frame.pack();
        frame.setVisible(true);
    }
    

    这里的技巧根本不是改变按钮,而是让 GUI 调整到按钮的大小。这是通过调用pack() 来实现的。

    调整此窗口的大小以适合其子组件的首选大小和布局。 ..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 2017-03-22
      • 2011-04-27
      • 2019-07-23
      • 1970-01-01
      相关资源
      最近更新 更多