kar*_*tal 2 java swing render jlist listcellrenderer
是否可以在一个类中使用多个ListCellRenderer?
实际上我的应用程序中有多个JList,我需要为每个JList需要不同的ListCellRenderer.
我可以为实现ListCellRenderer的Component方法使用不同的类名.
例如:如果我有一个名为"MultiColumnCellRenderer"的类,其中包含一些Component方法的实现,另一个名为"MultiColumnCellRenderer2"的类,以及其他一些Component方法的实现?
public class MultiColumnCellRenderer extends JPanel implements
ListCellRenderer {
public MultiColumnCellRenderer() {
}
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
// Some implementation of Component Method
super.setEnabled(list.isEnabled());
super.setFont(list.getFont());
return this;
}
}
public class MultiColumnCellRenderer2 extends JPanel implements
ListCellRenderer {
public MultiColumnCellRenderer2() {
}
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
// Some implementation of Component Method
super.setEnabled(list.isEnabled());
super.setFont(list.getFont());
return this;
}
}`
Run Code Online (Sandbox Code Playgroud)
如果我做了类似的事情:
list1.setCellRenderer(new MultiColumnCellRenderer());
list2.setCellRenderer(new MultiColumnCellRenderer2());
Run Code Online (Sandbox Code Playgroud)
它没有工作....
我正在为list1和list2寻找不同的渲染.
我怎样才能做到这一点
是否可以在一个类中使用多个ListCellRenderer?
如果用'have'表示'使用',如果用'class'表示'GUI',那么是的.
这是一个例子:

import java.awt.*;
import javax.swing.*;
class MultiColumnCellRendererTest {
public static void main(String[] args) {
final String[] fruits = {
"Apple",
"Pear",
"Banana",
"Grapefruit"
};
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JList fruitList1 = new JList(fruits);
fruitList1.setCellRenderer(new MultiColumnCellRenderer());
JList fruitList2 = new JList(fruits);
fruitList2.setCellRenderer(new MultiColumnCellRenderer2());
JPanel gui = new JPanel(new GridLayout(1,0,2,2));
gui.add(fruitList1);
gui.add(fruitList2);
JOptionPane.showMessageDialog(null, gui);
}
});
}
}
class MultiColumnCellRenderer extends JPanel implements
ListCellRenderer {
JLabel label;
public MultiColumnCellRenderer() {
setBackground(Color.RED);
label = new JLabel();
add(label);
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
label.setText(value.toString());
super.setEnabled(list.isEnabled());
super.setFont(list.getFont());
return this;
}
}
class MultiColumnCellRenderer2 extends JPanel implements
ListCellRenderer {
JLabel label;
public MultiColumnCellRenderer2() {
setBackground(Color.GREEN);
label = new JLabel();
add(label);
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
label.setText(value.toString());
super.setEnabled(list.isEnabled());
super.setFont(list.getFont());
return this;
}
}
Run Code Online (Sandbox Code Playgroud)