Resizing JButtons and other components according to text

前端 未结 2 834
不思量自难忘°
不思量自难忘° 2021-02-09 05:27

How do you resize a JButton at runtime so it adapts to the text given by setSize? I\'ve done some searching and this is the code I\'ve come up with so far. Could th

相关标签:
2条回答
  • 2021-02-09 06:06

    I had the same problem, even when using a layout manager (BorderLayout). But in my case a simple call to layoutContainer() of the associated layout manager and then a repaint() on the JFrame was sufficient for changing the width of the button.

    button1.setText("New Label that differs in width");
    // button1 is inside the container horizontalBox
    horizontalBox.getLayout().layoutContainer(horizontalBox);
    repaint(); // on the containing JFrame
    
    0 讨论(0)
  • 2021-02-09 06:26

    You need to use setPreferredSize() on the component. Then, to resize it, call setBounds().

    I would probably subclass the button, and override the setText(String text) method to include the resizing code.

    @Override
    public void setText(String arg0) {
        super.setText(arg0);
        FontMetrics metrics = getFontMetrics(getFont()); 
        int width = metrics.stringWidth( getText() );
        int height = metrics.getHeight();
        Dimension newDimension =  new Dimension(width+40,height+10);
        setPreferredSize(newDimension);
        setBounds(new Rectangle(
                       getLocation(), getPreferredSize()));
    }
    

    For testing, I did this in the constructor of my new JButton subclass:

    public ResizeToTextButton(String txt){
        super(txt);
        addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                setText(JOptionPane.showInputDialog("Text"));
            }
        });
    }
    

    So, whenever I clicked on the button I could change the text and see if it resized properly.

    0 讨论(0)
提交回复
热议问题