Я создаю поворотную панель, которая содержит поле со списком, которое может изменить масштаб изображения. Я решил отделить код комбинированного окна масштаба от его собственного класса, поскольку он используется в программе. Масштаб может быть недействительным, поэтому я хочу каким-то образом предупредить пользователя о том, что был выбран неверный масштаб. В любом другом случае я ловлю сообщения об ошибках и отображаю их в плавающем окне, но я хочу сделать его более модульным (например, у меня есть одна страница с плавающими окнами, а другая - для входа в файл). Могу ли я поймать ошибку, выданную слушателем действия?
Это класс, в который инкапсулировано поле со списком. Вы можете видеть, что слушатель действия находится внутри.
public class Scale {
public JComboBox<Integer> scaleComboBox;
private Integer defaultScale;
private Panel Panel;
public Scale(Integer defaultScale, Integer[] scales, Panel Panel) {
this.defaultScale = defaultScale;
this.Panel = panel;
this.scaleComboBox = new JComboBox<Integer>(scales);
this.scaleComboBox.setEditable(true);
this.scaleComboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
scaleChangeRequested();
}
});
this.scaleComboBox.setSelectedItem(defaultScale);
}
private void scaleChangeRequested() {
double newScale = defaultScale;
Object x = scaleComboBox.getSelectedItem();
if (x instanceof String) {
try {
newScale = Float.parseFloat((String)x);
} catch (NumberFormatException e) {
scaleComboBox.setSelectedItem(newScale = defaultScale);
}
} else if (x instanceof Number) {
newScale = ((Number)x).doubleValue();
}
if (newScale < Panel.MIN_SCALE) {
scaleComboBox.setSelectedItem(newScale = defaultScale);
throw new IllegalArgumentException("Scale must be at least " + Panel.MIN_SCALE);
}
panel.setScale(newScale);
}
}
Вы можете увидеть «IllegalArgumentException» внизу, если есть проблема. Есть ли хороший способ справиться с этим?