【Java】高级Swing——JList

Java Swing的JList组件通过将图形和数据分离,提供了高度的灵活性。使用DefaultListModel可以方便地添加元素,而单元格渲染器则允许自定义列表的显示样式。通过实现ListCellRenderer接口,可以控制每个单元格的绘制,例如创建JLabel对象以简化绘制过程。虽然这种方式复杂,但它允许对每个单元格进行个性化定制,相比其他语言可能需要更多代码来实现相同功能。
摘要由CSDN通过智能技术生成

Java中广泛采用一种接口式的设计,这使得Java的Swing组件的表现上十分灵活。

Jlist究竟是如何设计的呢?事实上:Jlist把图形和数据进行的分离。JList中可以T可以是字符串数组。

String[] text={
   A,B,C,D};
JList<String> list=new JList<String>(text);

如想要自由地添加列表元素,可以获得一个DefaultListModel,它实现了ListModel接口

DefaultListModel<String> model=new DefaultListModel<>();

使用addElement()就可以添加元素了,并且还会通知JList重新绘制列表。

改变JList的外观需要设置单元格渲染器,单元格渲染器需要继承JComponent并实现ListCellRenderer接口

每次绘制单元格时,就会调用public Component
getListCellRendererComponent(JList<? extends Object> list, Object value,
int index,boolean isSelected, boolean cellHasFocus)方法,并返回
Component对象,并使用paintComponent()方法绘制出单元格,绘制完成后,调用
getPreferredSize()返回组件的大小。

有一种简单的方法就是在public Component
getListCellRendererComponent(JList<? extends Object> list, Object value,
int index,boolean isSelected, boolean cellHasFocus)方法中创建JLabel对象并返回,这样就不要我们用画笔(Graphics对象)绘制了。这就相当于在列表中加入了标签。

JList是不带滚动条的,也需要我们自己去定制。

不得不承认,这十分复杂,但这样的设计可以使得我们自由的设置列表的样式。甚至对每一个单元格都可以定制它的样式。这用其他的语言实现恐怕会需要更多的代码。

下面给出一个例子

package JList;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;

import javax.swing.DefaultListModel;
import javax.swing.JComponent
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值