java - 多个ListCell渲染器

标签 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;
    }
}`

如果我做类似的事情:

list1.setCellRenderer(new MultiColumnCellRenderer());
list2.setCellRenderer(new MultiColumnCellRenderer2());

它不起作用......

我正在寻找 list1 和 list2 的不同渲染。

我怎样才能实现这个目标

最佳答案

Is it possible to have multiple ListCellRenderer's implementation in a single class?

如果“拥有”的意思是“使用”,而“类”的意思是“GUI”,那么是的。

这是一个例子:

MultiColumnCellRendererTest

来源

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;
    }
}

关于java - 多个ListCell渲染器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8987285/

相关文章:

java - Android:使用 RecyclerView 和 CardView 进行项目复制 - 如何停止复制?

java - Spring Boot 中每 t 的请求数限制

java - 如何平滑这个 Java Mandelbrot 算法?

javascript - 如何使用 Rails 从 AJAX 调用中检索值?

java - 如果我使用 Java 而不是 PHP,这个 URL 应该指向哪里?

java - 使用 Eclipse 和 Glassfish 的简单数据库 Web 应用程序

java - GraphicsConfiguration.getDevice() 返回错误的监视器 ID

java 类属性绑定(bind)到 swing 组件

Java BufferedImage 保存不需要的背景颜色

c++ - 在中心位置渲染模型不显示(修订)