有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java更改JComboBox的字体颜色

使用netbeans,我的组合框中有这段代码,可以生成名称建议

  private void createAndShowGui() {
  if(comboBox.isDisplayable()){
    txtNameID.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void insertUpdate(DocumentEvent e) {

            Runnable doAssist = new Runnable() {
                @Override
                public void run() {
                    comboFilter(txtNameID.getText());
                    System.out.println(txtNameID.getText());
                }
            };
            SwingUtilities.invokeLater(doAssist);
        }

        @Override
        public void removeUpdate(DocumentEvent e) {
            Runnable doAssist = new Runnable() {
                @Override
                public void run() {
                    comboFilter(txtNameID.getText());
                }
            };
            SwingUtilities.invokeLater(doAssist);
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
            // plain text components dont fire this
        }
    });

    comboBox.addActionListener((ActionEvent e) -> {
        txtNameID.setText(comboBox.getSelectedItem().toString());
       
    });
 }
}

//COMBOBOX SUGGEST
public void comboFilter(String enteredText) {
    java.util.List<String> filterArray = new ArrayList<String>();

    String lname = "";
    String fname = "";
    String mi = "";
    String id = "";

    try {
        con = databasePatient.ConnectDb();
        String str = "SELECT * FROM patient_record WHERE firstname  LIKE '" + enteredText + "%' OR lastname  LIKE '" + enteredText + "%' OR patient_id  LIKE '" + enteredText + "%' OR name  LIKE '" + enteredText + "%' OR name  LIKE '%" + enteredText + "%'";
        Statement stmt = con.createStatement();
        ResultSet rs2 = stmt.executeQuery(str);

        if (enteredText.equals("")) {
            String str1 = "";
            filterArray.add(str1);
        } else 
            if (rs2.next()) {
            Statement stmt1 = con.createStatement();
            String str2 = "SELECT * FROM patient_record WHERE firstname  LIKE '" + enteredText + "%' OR lastname  LIKE '" + enteredText + "%' OR patient_id  LIKE '" + enteredText + "%'OR name  LIKE '" + enteredText + "%' OR name  LIKE '%" + enteredText + "%'";
            ResultSet rs = stmt1.executeQuery(str2);

            while (rs.next()) {
                String names = rs.getString("name");
                String str1 = names;
                filterArray.add(str1);
            }
            
        } else {
            String str1 = "";
            filterArray.add(str1);

        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    listOfNames.forEach((item) -> {
        if (item.contains(enteredText)) {
            filterArray.add(item);
        }
    });

    if (filterArray.size() > 0) {
        comboBox.setModel(new DefaultComboBoxModel(filterArray.toArray()));
    }
}

我的问题是,我不能简单地通过设置前景来改变组合框中文本的前景。文本的默认颜色是黑色,我需要将其设置为白色。有人能帮我吗?非常感谢您的帮助。谢谢!


共 (1) 个答案

  1. # 1 楼答案

    我没有尝试你的代码

    您的问题可能源于以下事实:组合框是项目的组合:显示选定值的字段、打开列表的按钮以及列表本身。现在,如果你设置组合框的前景色,我想这会对字段本身产生影响,但可能不会对按钮产生影响,也肯定不会对列表产生影响

    我在这之前是对的吗?在这种情况下,您应该了解如何修改当前条目的呈现、当前条目的编辑和列表的呈现

    如果你最终对很多单个组件重新进行了排序(我想你应该选择黑色背景和白色前景),也许你想看看Pluggable Look and Feel (PLAF)