Я строю систему динамического меню для внутреннего использования в нашей компании.
Одной из особенностей является то, что я использую JButton
с ActionListener
, чтобы открыть JFileChooser
, чтобы выбрать файл. Когда вы выбираете файл и нажимаете APPROVE_OPTION
, я обновляю содержимое JTextField
рядом с JButton
путем выбора пути к файлу:
jtf_hex.setText(jfc.getSelectedFile().getPath());
Это прекрасно работает, однако по какой-то причине выполнение setText
на JTextField
имеет возможность полностью остановить работу другого элемента на моей странице, JComboBox
.
Я провел серию тестов и определил, что если и только если я выполню setText
, JComboBox
перестанет работать.
Вот некоторые фрагменты кода, чтобы показать, что я делаю:
optionspane = new JPanel(new FlowLayout(FlowLayout.LEFT));
optionspane.setLayout(new GridLayout(0,1));
Panel rp = new Panel(new FlowLayout(FlowLayout.LEFT));
optionspane.add(rp);
// Create the uneditable text box
jtf_hex = new JTextField("", 20);
jtf_hex.setEditable(false);
rp.add(jtf_hex);
// Create a file select button and add it to the panel.
fwHexFileButton = new JButton("Select File");
fwHexFileButton.addActionListener(this); // Add action listener so something will happen when user clicks on the button.
rp.add(fwHexFileButton); // Add the button to the panel.
rp = new Panel(new FlowLayout(FlowLayout.LEFT)); // Create the next row
optionspane.add(rp); // Add the row to the window (grid).
rp.add(new JLabel("microSpider device type:"));
jdevicetypes = new JComboBox(deviceTypes());// Create dropdown box of device types.
jdevicetypes.setSelectedIndex(0); // Default to the first entry in the drop-down.
rp.add(jdevicetypes);
.. тогда в моем действии слушатель:
JComponent buttonObj = (JComponent) event.getSource ();
// Handle any on-page events:
if(buttonObj == (JComponent)fwHexFileButton)
{
jfc = new JFileChooser(new File("."));
if(jtf_hex.getText().length() > 0)
{ // If we already have a file selected, default to opening file chooser in this location.
jfc.setCurrentDirectory(new File(jtf_hex.getText()));
}
jfc.addChoosableFileFilter(new JtregFilter());
int retVal = jfc.showDialog(null, "Select");
if (retVal == JFileChooser.APPROVE_OPTION)
{
jtf_hex.setText(jfc.getSelectedFile().getPath());
}
}
Примечание: JComboBox
работает идеально вплоть до выполнения setText
. Если я открою JFileChooser
и выберу Cancel
, то JComboBox
продолжит работу.
Если после нажатия APPROVE
я делаю что-то еще, то есть отображаю какое-то окно с предупреждением, оно работает - кажется, по какой-то причине JTextField.setText()
nukes JComboBox
функциональность.
Примечание 2: Все остальные элементы на панели продолжают работать правильно после выполнения setText
. Однако у меня нет других элементов JComboBox
- просто набор флажков, кнопок и т. Д. И т. Д.
Примечание 3: у моего JComboBox
нет ActionListener
, так как я не думал, что это необходимо.
Есть идеи?
С уважением,
Винсент