Если я изменю тип компонента на JFormattedTextField (т. е. поставлю javax.swing.JFormattedTextField в атрибут class компонента), проблема исчезнет. Однако это не вариант, поскольку в реальном приложении я полагаюсь на API пользовательского компонента. Я не хочу перегружать свой код уродливыми вызовами, такими как ((ValueType) field).customMethod().
MRE. Чтобы воспроизвести его, вам понадобится IntelliJ IDEA. Диалоговое окно и форма должны находиться в одном каталоге.
Код: Выделить всё
import common.gui.ValueField;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
public class GuiDesignerDialog extends JDialog {
private JPanel contentPane;
private JButton okButton;
private ValueField field;
public GuiDesignerDialog() {
setContentPane(contentPane);
setModal(true);
getRootPane().setDefaultButton(okButton);
okButton.addActionListener(e -> onOK());
}
private void onOK() {
dispose();
}
public static void main(String[] args) {
GuiDesignerDialog dialog = new GuiDesignerDialog();
dialog.setTitle("GUI Designer Dialog Demo");
dialog.pack();
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
}
private void createUIComponents() {
field = new ValueField(); // the real class accepts a class literal
}
}
Код: Выделить всё
GuiDesignerDialog.formКод: Выделить всё
Код: Выделить всё
// as gutted as possible
import javax.swing.JFormattedTextField;
public class ValueField extends JFormattedTextField {
}

Windows 10. Java 8. Сообщество IntelliJ IDEA 2024.1
Подробнее здесь: https://stackoverflow.com/questions/798 ... ed-in-idea
Мобильная версия