JCombobox の行/エントリのフォントの色を、行ごとに一意に設定したいと考えています。したがって、基本的にドロップダウン矢印をクリックすると、異なる色の行がいくつか表示されるはずです。そのプロパティに基づいて自分で色を指定したいと思います。これを行うにはどうすればよいですか?ありがとう!
3160 次
3 に答える
2
カスタム ListCellRenderer を次のように作成する必要があります。
class Renderer extends JLabel implements ListCellRenderer {
このメソッドを実装します。
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
// Get the selected index. (The index param isn't
// always valid, so just use the value.)
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
// Display the text
String text = (String) value;
setText(text);
// Get the source
次に、ソースに応じて、 this.setForeground(Color color) を使用してテキストの色を設定します。ついに、
return this;
}
于 2009-06-01T17:07:17.500 に答える
1
を使用できますListCellRenderer
。これにはカスタムクラスを作成する必要があります。インデックスに基づいてフォアグラウンドを設定する完全なコードを次に示します (重複を避けるため)。このためのカスタム選択背景と背景を設定することもできます。コード内のコメントを参照してください。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class ListCellRendererDemo2 extends JFrame
{
Hashtable<Integer,Color> table;
JComboBox<String> c;
public ListCellRendererDemo2()
{
createAndShowGUI();
}
private void createAndShowGUI()
{
setTitle("JComboBox Demo");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
table=new Hashtable<Integer,Color>();
table.put(1,Color.RED);
table.put(2,Color.BLUE);
table.put(3,Color.GREEN);
table.put(4,Color.GRAY);
c=new JComboBox<String>();
c.addItem("Item 1");
c.addItem("Item 2");
c.addItem("Item 3");
c.addItem("Item 4");
c.addItem("Item 5");
c.addItem("Item 6");
c.addItem("Item 7");
c.addItem("Item 8");
c.setRenderer(new MyListCellRenderer(table));
add(c);
setSize(400,400);
setVisible(true);
}
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable(){
public void run()
{
new ListCellRendererDemo2();
}
});
}
}
class MyListCellRenderer extends DefaultListCellRenderer
{
Hashtable<Integer,Color> table;
public MyListCellRenderer(Hashtable<Integer,Color> table)
{
this.table=table;
// Set opaque for the background to be visible
setOpaque(true);
}
public Component getListCellRendererComponent(JList jc,Object val,int idx,boolean isSelected,boolean cellHasFocus)
{
// Set text (mandatory)
setText(val.toString());
// Set the foreground according to the selected index
setForeground(table.get(idx));
// Set your custom selection background, background
// Or you can get them as parameters as you got the table
if(isSelected) setBackground(Color.LIGHT_GRAY);
else setBackground(Color.WHITE);
return this;
}
}
于 2013-07-18T12:54:16.087 に答える