Мне нужно знать, как правильно отредактировать/изменить размер 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' интерфейс – MadProgrammer