如何解决更改 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 是项目的组合:显示选定值的字段、用于打开列表的按钮和列表本身。现在,如果您设置组合框前景色,我想这会对字段本身产生影响,但可能不会影响按钮,绝对不会出现在列表中。
我能到这里吗?在这种情况下,您应该查看如何修改当前条目的呈现,当前条目的编辑和列表的呈现。
- https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/swing/JComboBox.html#setEditor(javax.swing.ComboBoxEditor)
- https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/swing/JComboBox.html#setRenderer(javax.swing.ListCellRenderer)
如果您最终要对许多单个组件进行重新设计(我猜您想使用黑色背景和白色前景),也许您想查看 Pluggable Look and Feel (PLAF)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。