[英]Why can't I edit the appearance of this editable jComboBox?
我有這段代碼,而 MyComboBoxRenderer() 似乎無法使用它。 它在下面寫的注釋行中有一個錯誤。
此代碼用於自動建議。 因此,當用戶在文本字段上鍵入時,它會在組合框中顯示建議。
public test2() {
initComponents();
jComboBox1.setRenderer(new MyComboBoxRenderer1());
jComboBox1.setBackground(new Color(0,0,0,0));
final JTextField textfield = (JTextField) jComboBox1.getEditor().getEditorComponent(); //it has error in this line
textfield.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent ke) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
comboFilter(textfield.getText());
}
});
}
});
}
也許它與文本字段有關。 我的問題是我想編輯組合框的外觀或設計。 我希望它繼承框架的背景。 像透明的。 例子在圖片中。
這是圖片。 請點擊以下鏈接查看。
這是我在組合框渲染器中的代碼。
public MyComboBoxRenderer1(){
setOpaque(true);
setFont(new Font ("Segoe UI Semibold", Font.PLAIN ,14));
setForeground(Color.WHITE);
}
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
setText(value.toString());
if (isSelected)
{
setBackground(Color.WHITE);
setForeground(Color.BLACK);
}
else {
setBackground(Color.GRAY);
setForeground(Color.WHITE);
}
return this;
}
}
為什么渲染器不支持這個? 我應該怎么做才能讓它發揮作用? 有人可以幫我嗎? 先感謝您。 :)
編輯...
我已經將背景設置為透明。 我只需要聲明 texfield 的背景。 XD 是的。 textfield.setBackground(新顏色(0,0,0,0)); textfield.setForeground(新顏色(255,255,255));
但它留下了仍然不透明的一小部分。
我嘗試在我的框架上做一個額外的組合框。 但它沒有文本字段。 它工作得很好!
上面是帶有文本字段的組合框,我遇到了問題。 較低的是沒有文本字段的那個,我只是嘗試了代碼是否可以與普通的組合框一起使用。 我需要讓它看起來像較低的。
jComboBox1.setRenderer(new MyComboBoxRenderer1());
jComboBox1.setBackground(new Color(0,0,0,0));
jComboBox2.setRenderer(new MyComboBoxRenderer1());
jComboBox2.setBackground(new Color(0,0,0,0));
它有相同的代碼。 但它不適用於另一個。 也許是因為再次文本字段? :(((
jComboBox1.setBackground(new Color(0,0,0,0));
不要嘗試使用透明的顏色。 Swing 不知道如何正確繪制透明顏色。 有關更多信息,請參閱: 具有透明度的背景。
相反,您更改組件的不透明度:
component.setOpaque( false );
在組合框的情況下,您需要擔心組件和渲染器,因此您可以使用:
comboBox.setOpaque(false);
((JLabel)comboBox.getRenderer()).setOpaque(false);
但是,這現在會導致下拉列表出現問題。 由於渲染現在是透明的,您將看不到行選擇。
尚未對此進行測試,但如果根據正在渲染的項目更改渲染器的不透明度,則可能是一個可能的解決方案。
代碼可能是:
public Component getListCellRendererComponent(
JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
setOpaque(index == -1 ? false : true);
// add custom painting here
return this;
}
-1 表示組合框中的項目與列表中的項目相反。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.