listcellrenderer
の純粋に 1 つのセルにを適用することは可能jlist
ですか? 私のコードは現在、レンダラーを適用する際に問題なく動作しますが、エントリごとに異なる動的変数を設定したいと考えています。これが少しあいまいな場合は申し訳ありません..
要約するlistcellrenderer
と、リスト内の 1 つのセルだけに適用したいのですが、どうすればよいでしょうか?
listcellrenderer
の純粋に 1 つのセルにを適用することは可能jlist
ですか? 私のコードは現在、レンダラーを適用する際に問題なく動作しますが、エントリごとに異なる動的変数を設定したいと考えています。これが少しあいまいな場合は申し訳ありません..
要約するlistcellrenderer
と、リスト内の 1 つのセルだけに適用したいのですが、どうすればよいでしょうか?
ListCellRenderer をリスト内のすべての要素に適用する必要がありますが、それはすべての要素を同じ方法でレンダリングする必要があるという意味ではありません。たとえば、その値に基づいてセルをレンダリングできます (生の値、または値のクラスに基づいて、またはセルのインデックスに基づいてさえも)。
package com.example;
import java.awt.Color;
import java.awt.Component;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
public class ListCellRendererExample extends JFrame {
public ListCellRendererExample() {
DefaultListModel model = new DefaultListModel();
model.addElement(Color.BLUE);
model.addElement("hello");
model.addElement(5);
model.addElement(Color.RED);
JList jlist = new JList(model);
jlist.setCellRenderer(new SuperDuperListCellRenderer());
add(new JScrollPane(jlist));
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setLocationByPlatform(true);
setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args) {
new ListCellRendererExample();
}
private static class SuperDuperListCellRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
// If the value is a color, give the cell a blank value but save its
// value so we can later change its background to the value's color.
Color bgColor = null;
if (value instanceof Color) {
bgColor = (Color) value;
value = " ";
}
// Prepend the index to the "even" rows (the first row is row 1)
if ((index + 1) % 2 == 0) {
value = index + ": " + value;
}
Component renderComponent = super.getListCellRendererComponent(
list, value, index, isSelected, cellHasFocus);
// If the value is a color, set the cell's background to that color.
if (bgColor != null) {
renderComponent.setBackground(bgColor);
}
return renderComponent;
}
}
}
jlist内の純粋に1つのセルにlistcellrendererを適用することは可能ですか?
いいえ、すべてのセルが同じレンダラーを共有する必要があります。それがレンダラーの仕組みです。
私のコードは現在、レンダラーを適用する際に問題なく動作しますが、エントリごとに異なる動的変数を設定したいと考えています。
これは可能です。レンダラーは、レンダリングするデータの状態に応じて、セルのレンダリング方法を変更できます。
これが少しあいまいな場合は申し訳ありません..
もっと説明してコードを示したほうがいいです。
要約すると、listcellrenderer をリスト内の 1 つのセルだけに適用したいのですが、どうすればよいでしょうか?
ここでも、レンダラーの動作をセルが保持する値に依存させます。より詳細な回答が必要な場合は、sscceを作成して投稿し、詳細を説明することを検討してください (たとえば、異なる方法でレンダリングする方法は?)。