Swing JList渲染器--DefaultListCellRenderer的使用

效果如图:




package test;


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.DefaultListCellRenderer;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;

@SuppressWarnings("serial")
public class CellRenderer extends DefaultListCellRenderer{
    JPanel newPanel = new JPanel();
    String[] s = {"美国","日本","大陆","英国","法国","意大利","澳洲","韩国"};
    String valueIndex="1,3,5";
    public Component createComponent() {
        JList list = new JList(s);
        JScrollPane jScrollPane = new JScrollPane(list);
        jScrollPane.setPreferredSize(new Dimension(150, 230));    //设置滚动list的宽度以及高度(宽150,高230)
        
        //加载样式
        list.setCellRenderer((ListCellRenderer) getListCellRendererComponent(list, "", 0, true, true));

        //加载选择文件框
        newPanel.add(jScrollPane);
        
        return newPanel;
    }
    
            //JLst渲染器
            //list - 正在绘制的 JList,value - 由 list.getModel().getElementAt(index) 返回的值,index - 单元格索引。isSelected - 如果选择了指定的单元格,则为 true。cellHasFocus - 如果指定的单元格拥有焦点,则为 true。
            public Component getListCellRendererComponent(javax.swing.JList list,
                        Object value, int index, boolean isSelected, boolean cellHasFocus) {
            setText(value.toString());
            Color background = null;
            Color foreground = null;
            if(valueIndex!=null){
                 String[] _valueIndex = valueIndex.split(",");
                    for(int i=0;i<_valueIndex.length;i++){
                        if((index+"").equals(_valueIndex[i])){
                            background = Color.RED;
                            foreground = Color.WHITE;
                        }
                    }
            }
           
            if(isSelected){
                background = Color.BLUE;
                foreground = new Color(0, 255, 0);
            }    
            setBackground(background);
            setForeground(foreground);
            
            return this;
                }
            
            public static void main(String[] args) {
                CellRenderer test = new CellRenderer();
                Component contents = test.createComponent();

                JFrame frame = new JFrame("CellRenderer");
                frame.setCursor(new Cursor(12));
                frame.setBounds(0, 0,300, 300);
                frame.setResizable(false); // 禁止最大化,禁止拖拉窗口大小
                // frame.pack();
                // 设置窗体启动位置
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
                frame.getContentPane().add(contents, BorderLayout.CENTER);

                frame.addWindowListener(new WindowAdapter() {
                    public void windowClosing(WindowEvent e) {
                        System.exit(0);
                    }
                });
            }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JList 是 Java Swing 组件中的一个列表组件,可以用来展示一组数据。以下是 JList 的用法: 1. 创建 JList 对象: ``` JList list = new JList(); ``` 2. 设置数据模型: JList 组件需要一个数据模型来存储数据,可以使用 DefaultListModel 类来创建数据模型: ``` DefaultListModel model = new DefaultListModel(); model.addElement("Item 1"); model.addElement("Item 2"); list.setModel(model); ``` 3. 设置显示样式: 可以通过设置 ListCellRenderer 对象来改变每个列表项的显示样式: ``` list.setCellRenderer(new MyListRenderer()); ``` 4. 添加到容器中: 将 JList 添加到容器中即可显示出来: ``` JScrollPane scrollPane = new JScrollPane(list); frame.getContentPane().add(scrollPane); ``` 完整示例代码: ``` import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.ListCellRenderer; public class MyListRenderer implements ListCellRenderer<String> { public static void main(String[] args) { JFrame frame = new JFrame(); JList<String> list = new JList<String>(); DefaultListModel<String> model = new DefaultListModel<String>(); model.addElement("Item 1"); model.addElement("Item 2"); list.setModel(model); list.setCellRenderer(new MyListRenderer()); JScrollPane scrollPane = new JScrollPane(list); frame.getContentPane().add(scrollPane); frame.pack(); frame.setVisible(true); } public MyListRenderer() { } @Override public Component getListCellRendererComponent(JList<? extends String> list, String value, int index, boolean isSelected, boolean cellHasFocus) { JLabel label = new JLabel(); label.setText(value); if (isSelected) { label.setBackground(list.getSelectionBackground()); label.setForeground(list.getSelectionForeground()); } else { label.setBackground(list.getBackground()); label.setForeground(list.getForeground()); } label.setOpaque(true); return label; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值