string
内部が表示できない(大きすぎる)ときに自動サイズ変更するボタンを作成したかったのです。
私はそのようなものを得ました:
public class ResizingButton extends JButton {
public ResizingButton(String txt) {
super(txt);
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
setText(JOptionPane.showInputDialog("Text"));
}
});
}
@Override
public void setText(String arg0) {
super.setText(arg0);
FontMetrics metrics = getFontMetrics(getFont());//nullPointerException !!!
int width = metrics.stringWidth(getText());
int height = metrics.getHeight();
Dimension newDimension = new Dimension(width + 40, height + 10);
setPreferredSize(newDimension);
setBounds(new Rectangle(getLocation(), getPreferredSize()));
}
}
私はそのクラスを使いたかった:
public class Zadanie2 extends JFrame {
public Zadanie2() {
createGUI();
}
private void createGUI() {
setSize(200, 80);
//setLayout(new GridLayout());
add(new ResizingButton("tekst"));
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Zadanie2();
}
}
setText()
しかし、メソッドで null ポインター例外が発生していますか? なぜそれが起こっているのですか、どうすれば修復できますか? getFont()
null を返し、getFontMetrics(null)
例外をスローします。
スタックトレース:
Exception in thread "main" java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.hash(Unknown Source)
at java.util.concurrent.ConcurrentHashMap.get(Unknown Source)
at sun.font.FontDesignMetrics.getMetrics(Unknown Source)
at sun.swing.SwingUtilities2.getFontMetrics(Unknown Source)
at javax.swing.JComponent.getFontMetrics(Unknown Source)
at ResizingButton.setText(ResizingButton.java:26)
at javax.swing.AbstractButton.init(Unknown Source)
at javax.swing.JButton.<init>(Unknown Source)
at javax.swing.JButton.<init>(Unknown Source)
at ResizingButton.<init>(ResizingButton.java:13)
at Zadanie2.createGUI(Zadanie2.java:14)
at Zadanie2.<init>(Zadanie2.java:8)
at Zadanie2.main(Zadanie2.java:20)