我需要知道如何正確更新/調整JTextfield
的高度,以便它適應運行時更改其文本字體大小?如何正確動態更新/調整JTextfield的高度,使其適應運行時更改的文本字體大小?
此代碼是我的情況的SSCCE。代碼首先從Preferences
讀取字體大小;並在沒有保存優先值的情況下返回指定的默認值(12)。然後,當您通過JSpinner
更改字體大小時,它會將新值保存在Preferences
中,並且會在您下次啓動應用程序時讀取保存的值。下次該應用程序啓動時; JtextField
將使用新保存的字體大小值創建。如何動態地實現高度的更新/調整大小?
import java.awt.*;
import java.util.prefs.Preferences;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Accommodated_JTextField extends JFrame implements ChangeListener {
Preferences prefs;
final String fontSizePref;
JTextField textField;
Font font;
int fontSize;
SpinnerNumberModel spinnerModel;
JSpinner spinner_fontSize;
public Accommodated_JTextField() {
prefs = Preferences.systemNodeForPackage(Accommodated_JTextField.class);
fontSizePref = "fontSizePref";
fontSize = prefs.getInt(fontSizePref, 12);
System.out.println(fontSize);
font = new Font(Font.SANS_SERIF, Font.PLAIN, fontSize);
textField = new JTextField(10);
textField.setFont(font);
spinnerModel = new SpinnerNumberModel(fontSize, 12, 40, 1);
spinner_fontSize = new JSpinner(spinnerModel);
spinner_fontSize.setPreferredSize(new Dimension(45, spinner_fontSize.getPreferredSize().height));
spinner_fontSize.addChangeListener(this);
JPanel panel = new JPanel();
panel.add(textField);
panel.add(spinner_fontSize);
add(panel);
setSize(700, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void stateChanged(ChangeEvent e) {
fontSize = ((Integer) spinner_fontSize.getValue());
font = new Font(Font.SANS_SERIF, Font.PLAIN, fontSize);
textField.setFont(font);
prefs.putInt(fontSizePref, fontSize);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Accommodated_JTextField accommodated_textField = new Accommodated_JTextField();
}
});
}
}
您需要'revalidate'容器層次結構和'repaint'的UI – MadProgrammer