7

で指定されたテキストに適応するように、実行時に JButton のサイズを変更するにはどうすればよいですsetSizeか? 私はいくつかの検索を行いましたが、これは私がこれまでに思いついたコードです。これをユーティリティメソッドに変えることはできますか?

FontMetrics metrics = getFontMetrics( font );
int width = metrics.stringWidth( string );

PS: レイアウト マネージャーは使用されていません。

4

2 に答える 2

9

setPreferredSize()コンポーネントで使用する必要があります。次に、サイズを変更するには、 を呼び出しますsetBounds()

おそらくボタンをサブクラス化し、setText(String text)メソッドをオーバーライドしてサイズ変更コードを含めます。

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

テストのために、新しいJButtonサブクラスのコンストラクターでこれを行いました。

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

そのため、ボタンをクリックするたびに、テキストを変更して、適切にサイズ変更されているかどうかを確認できました。

于 2010-08-14T21:17:53.997 に答える
2

レイアウト マネージャー (BorderLayout) を使用している場合でも、同じ問題が発生しました。しかし、私の場合、layoutContainer()関連付けられたレイアウト マネージャーを呼び出してからrepaint()JFrame を呼び出すだけで、ボタンの幅を変更するのに十分でした。

button1.setText("New Label that differs in width");
// button1 is inside the container horizontalBox
horizontalBox.getLayout().layoutContainer(horizontalBox);
repaint(); // on the containing JFrame
于 2011-11-25T11:28:43.843 に答える