【问题标题】:JComboBox unable to edit or enter textJComboBox 无法编辑或输入文本
【发布时间】:2015-11-26 19:21:33
【问题描述】:

我无法在 java 中编辑 JComboBox。虽然我已将属性 editable 设置为 true 但仍然没有用。当我将该属性设置为可编辑时,我什至无法使用或选择其下拉列表中的值

JComboBox comboBoxEmployeeID = new JComboBox();
comboBoxEmployeeID.setModel(new DefaultComboBoxModel(new String[] {"45", "67", "78", "97"}));
comboBoxEmployeeID.setEditable(true);
comboBoxEmployeeID.setEnabled(true);
comboBoxEmployeeID.setBounds(140, 13, 163, 20);
add(comboBoxEmployeeID)

还有一件事是,当我只是在 Eclipse 的快速/测试和预览中查看设计时,我得到了一个可编辑且运行良好的 JComboBox,但一旦我调试,问题就出现了

Here is the Quickly/Test and Preview Screenshot

【问题讨论】:

  • 不要使用空布局和 setBounds(...)。 Swing 旨在与layout managers 一起使用。

标签: java eclipse swing jcombobox


【解决方案1】:

您的问题可能是由您的代码的另一部分引起的。您可以为整个框架(或应用程序)添加代码吗?如果我测试您问题中的代码(使用 Java 8 [1.8.0_65] 和 IntelliJ 15),它在我的机器上运行良好:

import javax.swing.*;

public class ComboBoxNoChange {
    public static void main(final String[] arguments) {
        SwingUtilities.invokeLater(() -> new ComboBoxNoChange().createAndShowGui());
    }

    private void createAndShowGui() {
        final JFrame frame = new JFrame("Stack Overflow");
        frame.setBounds(100, 100, 800, 600);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        final JPanel panel = new JPanel();
        panel.add(createComboBox(new String[]{"45", "67", "78", "97"}));
        frame.getContentPane().add(panel);

        frame.setVisible(true);
    }

    private JComboBox<String> createComboBox(String[] employeeIDs) {
        JComboBox<String> employeeIdComboBox = new JComboBox<>();
        employeeIdComboBox.setModel(new DefaultComboBoxModel<>(employeeIDs));
        employeeIdComboBox.setEditable(true);
        employeeIdComboBox.setEnabled(true);
        employeeIdComboBox.setBounds(140, 13, 163, 20);

        return employeeIdComboBox;
    }
}

【讨论】:

  • 面板切换是否会导致问题
  • 您的意思是在框架或JTabbedPane 中的面板之间切换?或者在您的应用程序中的多个帧之间切换?我不知道它如何影响组合框。一旦它可见并启用,我希望它可以工作。如果您可以在屏幕截图中添加“Wrapper JFrame”的代码,我们或许可以重现该问题。
  • 登录面板有一个完美的工作组合框,但我认为它与面板切换有关,这就是ChangingPanel.removeAll();ChangingPanel.add(updateuser);updateuser.setVisible(true);repaint();
  • 您可以尝试使updateuser 组件(和其他组件)可见或不可见,而不是将其添加或删除到ChangingPanel。根据一小部分代码很难说;为您的问题添加更多代码以获得更多建议。
猜你喜欢
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多