Я узнал немного больше о Java GUI. Однако я столкнулся с проблемой и не знаю, как ее исправить.Java - JFormattedTextField AddActionListener
У меня есть часть моей программы (отображается ниже, но неактуальный код удален), и все, кроме функции JFormattedTextField (sliderField), работает. То, что я пытаюсь сделать, это сделать так, если значение набирается в sliderField, которое больше 5000, и панель обновляется (уже сделано в другом месте), поле изменится на 5000. Однако по какой-то причине actionPerformed не похоже, регистрируют какие-либо изменения в моем JFormattedTextField, также предотвращая изменение переменной.
Вот мой код:
public class testMenu extends JPanel implements ActionListener, ChangeListener {
public testMenu(GUI p) {
parent = p;
setLayout(new FlowLayout(FlowLayout.LEFT, 10, 0));
createPanel();
setVisible(true);
}
public void createPanel() {
createOptions();
}
private void createOptions() {
options[0] = new JPanel();
add(options[0]);
options[1] = new JPanel();
add(options[1]);
options[2] = new JPanel();
add(options[2]);
options[3] = new JPanel();
add(options[3]);
options[4] = new JPanel();
add(options[4]);
slider = new JSlider(0, 5000, 0);
slider.setPaintTicks(true);
slider.setValue(parent.variable);
slider.addChangeListener(this);
sliderField = new JFormattedTextField(NumberFormat.getInstance());
sliderField.setText(Integer.toString(parent.variable));
sliderField.setColumns(4);
sliderField.addActionListener(this);
options[5] = new JPanel();
options[5].add(new JLabel("Slider Value:"));
options[5].add(slider);
options[5].add(sliderField);
options[5].setVisible(false);
add(options[5]);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == sliderField) {
int size = Integer.parseInt(sliderField.getText());
System.out.println(size);
if (size > 5000) {
sliderField.setText("5000");
size = 5000;
}
parent.setVariable("" + size);
}
}
private GUI parent;
private JSlider slider;
private JFormattedTextField sliderField;
private JPanel[] options = new JPanel[5];
}
Мой вопрос прост: Почему actionPerformed не регистрации каких-либо действий делается на JFormattedTextField, и как я могу это исправить?
Кроме того, как бы я установил свой JFormattedTextField, поэтому, если значение больше, чем 999, никакие запятые не добавляются (предотвращение 1000 от 1000 до 1000)?
См. Правки для ответа. –