簡體   English   中英

為什么我不能編輯這個可編輯 jComboBox 的外觀?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM