java swing jlist_Java Swing - 如何添加边框到JList渲染器

该博客展示了如何使用Java Swing创建一个JList,并自定义其单元格渲染器,使得选中项具有突出的焦点边框。代码实例中,创建了一个包含100个元素的JList,设置了渲染器并在滚动面板中展示,同时确保了第50个元素可见。
摘要由CSDN通过智能技术生成

import java.awt.BorderLayout;

import java.awt.Component;

import javax.swing.DefaultListCellRenderer;

import javax.swing.DefaultListModel;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JList;

import javax.swing.JScrollPane;

import javax.swing.ListCellRenderer;

import javax.swing.border.Border;

import javax.swing.border.EmptyBorder;

import javax.swing.border.LineBorder;

import javax.swing.border.TitledBorder;

public class Main {

public static void main(String args[]) {

JFrame frame = new JFrame("Sizing Samples");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

DefaultListModel model = new DefaultListModel();

model.ensureCapacity(100);

for (int i = 0; i < 100; i++) {

model.addElement(Integer.toString(i));

}

JList jlist2 = new JList(model);

ListCellRenderer renderer = new FocusedTitleListCellRenderer();

jlist2.setCellRenderer(renderer);

JScrollPane scrollPane2 = new JScrollPane(jlist2);

frame.add(scrollPane2, BorderLayout.CENTER);

frame.setSize(300, 350);

frame.setVisible(true);

jlist2.ensureIndexIsVisible(50);

}

}

class FocusedTitleListCellRenderer implements ListCellRenderer {

protected static Border noFocusBorder = new EmptyBorder(15, 1, 1, 1);

protected static TitledBorder focusBorder = new TitledBorder(LineBorder.createGrayLineBorder(),

"title");

protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

public Component getListCellRendererComponent(JList list, Object value, int index,

boolean isSelected, boolean cellHasFocus) {

JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index,

isSelected, cellHasFocus);

renderer.setBorder(cellHasFocus ? focusBorder : noFocusBorder);

return renderer;

}

}

JListJava 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、付费专栏及课程。

余额充值