JFrame
私は特別なタイプのJButtons
(拡張するボタンの私自身のクラス)を含むwindow()を持っていますJButton
。そのウィンドウは、ボタンのサイズが変更されたときにサイズを変更することを想定しています(たとえば、ボタンをクリックすると、フォントのサイズが大きくなり、JButton の全体のサイズも大きくなります)。
ボタンを合わせたくないJFrame
のですが、ウィンドウの大きさを決めさせてくださいpack()
。解決策はありません。
ボタンのサイズ変更時にウィンドウのサイズを変更する一種のコンポーネント リスナを考えていましたが、何も見つかりませんでした。
コード例(動作、ボタンをクリック):
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JOptionPane;
public class ResizingButton extends JButton {
public ResizingButton(String txt) {
super();
setText(txt);
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
int newFontSize = getFont().getSize() + 1;
setFont(new Font(Font.SANS_SERIF, Font.PLAIN, newFontSize));
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()));
}
});
}
}
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class Zadanie2 extends JFrame {
JButton jb1, jb2;
public Zadanie2() {
createGUI();
}
private void createGUI() {
setSize(200, 80);
setLayout(new FlowLayout());
add(new ResizingButton("tekst"));
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Zadanie2();
}
}