swing的列表框_不强制存储列表项
不强制存储列表项的ListModel和ComboBoxModel
与JProgressBar一样,JList和JComboBox也采用了MVC的设计模式,JList和JComboBox只负责外观的显示,而组件底层的状态数据则由对应的Model对象来维护。JList对应的Model是ListModel接口,JComboBox对应的Model是ComboBox接口,其代码如下:
xxxxxxxxxx
public interface ListModel<E> {
//获取列表项的个数
int getSize();
//获取指定索引处的列表项
E getElementAt(int index);
//监听器
void addListDataListener(ListDataListener l);
//监听器
void removeListDataListener(ListDataListener l);
}
public interface ComboBoxModel<E> extends ListModel<E> {
//设置当前的列表项
void setSelectedItem(Object anItem);
//获取当前的列表项
Object getSelectedItem();
}
从上面接口ListModel
在使用JList和JComboBox时,除了可以使用jdk提供的Model实现类,程序员自己也可以根据需求,自己定义Model的实现类,实现对应的方法使用
swing的列表框_不强制存储列表项的练习
xxxxxxxxxx
package ch30;
import model.a_21_1NumberListModel;
import model.a_21_3NumberComboBoxListModel;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.math.BigDecimal;
import java.util.List;
public class a_21_2ListModelTest {
JFrame jf = new JFrame("测试ListModel");
//根据NumberListModel对象创建一个JList。参数:开始值、结束值、步长
JList<BigDecimal> jList = new JList<>(new a_21_1NumberListModel(new BigDecimal(1),new BigDecimal(21),new BigDecimal(2)));
//根据NumberComboBoxModel对象创建一个JComboBox。参数:开始值、结束值、步长
JComboBox<BigDecimal> jComboBox = new JComboBox<>(new a_21_3NumberComboBoxListModel(new BigDecimal(0.1),new BigDecimal(1.2),new BigDecimal(0.1)));
//文本框。15列
JTextField jTextField = new JTextField(15);
JLabel label = new JLabel("您选择的值是:");
//组装视图
public void init() {
//设置jList的可视高度为4,即列表框一次最多只能显示4个列表项
jList.setVisibleRowCount(4);
//默认选中第三项到第五项
jList.setSelectionInterval(2, 4);//注意起始下标是0
//设置列表框里面的每个列表项具有指定高度和宽度,单位是像素
jList.setFixedCellHeight(30);
jList.setFixedCellWidth(90);
//当用户点击列表框会触发的事件
jList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
//获取用户选中的所有数字
List<BigDecimal> selectedValuesList = jList.getSelectedValuesList();
//清空文本框
jTextField.setText("");
//增强for遍历集合
for (BigDecimal item : selectedValuesList) {
//jTextField.getText()是原本的条目内容,item.toString()是当前的条目内容
jTextField.setText(jTextField.getText() + item.toString() + ", ");
}
}
});
//设置jComboBox的可视高度为5,即下拉列表框一次最多只能显示5个列表项
jComboBox.setMaximumRowCount(5);
//当用户点击下拉列表框会触发的事件
jComboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
//获取用户当前选中的某个条目
Object value = jComboBox.getSelectedItem();
//把当前的条目(即列表项,我们的列表项是int类型的数字)转换成字符串并添加到文本框
jTextField.setText(value.toString());
}
});
Box hBox = Box.createHorizontalBox();
hBox.add(new JScrollPane(jList));//new JScrollPane(jList)表示的是我们给这个文本框加了一个滚动条
//把下拉列表框先放到Panel里面
JPanel tempPanel = new JPanel();
tempPanel.add(jComboBox);
hBox.add(tempPanel);
//把组装好的顶部区域放到整个窗口的中间区域
jf.add(hBox);
//组装底部
JPanel bottomPanel = new JPanel();
bottomPanel.add(label);
bottomPanel.add(jTextField);
//把组装好的底部区域放到整个窗口的南部区域
jf.add(bottomPanel, BorderLayout.SOUTH);
//设置窗口的最佳大小,设置窗口可见,设置点击叉号就退出程序
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new a_21_2ListModelTest().init();
}
}