繁体   English   中英

更改 JComboBox 的字体颜色

[英]Changing font color of JComboBox

使用 netbeans,我的 comboBox 中有此代码,它会生成名称建议。

  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()));
    }
}

我的问题是我无法通过简单地放置 setForeground 来更改 comboBox 中文本的前景。 文本的默认颜色是黑色,我需要将其设为白色。 有谁可以帮我离开这里吗? 帮助将不胜感激。 谢谢!

我没有尝试你的代码。

您的问题可能源于 ComboBox 是项目的组合:显示所选值的字段、打开列表的按钮和列表本身。 现在,如果您设置 combobox 前景色,我想这会对字段本身产生影响,但可能不会在按钮上,而且绝对不会在列表中。

到这里为止我是对的吗? 在这种情况下,您应该查看如何修改当前条目的呈现、当前条目的编辑和列表的呈现。

如果你最终重新设计了很多单个组件(我猜你想将 go 改成黑色背景和白色前景),也许你想看看Pluggable Look and Feel (PLAF)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM