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 楼答案
我没有尝试你的代码
您的问题可能源于以下事实:组合框是项目的组合:显示选定值的字段、打开列表的按钮以及列表本身。现在,如果你设置组合框的前景色,我想这会对字段本身产生影响,但可能不会对按钮产生影响,也肯定不会对列表产生影响
我在这之前是对的吗?在这种情况下,您应该了解如何修改当前条目的呈现、当前条目的编辑和列表的呈现
如果你最终对很多单个组件重新进行了排序(我想你应该选择黑色背景和白色前景),也许你想看看Pluggable Look and Feel (PLAF)