微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更改 JComboBox 的字体颜色

如何解决更改 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()));
    }
}

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

解决方法

我没有尝试你的代码。

您的问题可能源于这样一个事实,即 ComboBox 是项目的组合:显示选定值的字段、用于打开列表的按钮和列表本身。现在,如果您设置组合框前景色,我想这会对字段本身产生影响,但可能不会影响按钮,绝对不会出现在列表中。

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

如果您最终要对许多单个组件进行重新设计(我猜您想使用黑色背景和白色前景),也许您想查看 Pluggable Look and Feel (PLAF)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。