JComboBox перестает работать после выполнения setText для другого пункта меню - PullRequest
0 голосов
/ 15 декабря 2011

Я строю систему динамического меню для внутреннего использования в нашей компании.

Одной из особенностей является то, что я использую 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, так как я не думал, что это необходимо.

Есть идеи?

С уважением, Винсент

...