五、列表
Swing中提供了列表(JList)组件,可以单选或多选。
JList常用的构造方法有:
- JList():创建一个列表对象。
- JList(Object [] listData):创建一个列表对象,listData设置列表中选项。列表中选项内容可以是任意类,而不再局限于String。
下面通过示例介绍列表组件:
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
/**
* @author : 蔡政洁
* @email :[email protected]
* @date : 2020/2/24
* @time : 11:04 下午
*/
public class MyFrame extends JFrame {
private String[] s1 = {"Java","python","php","c++","go","c","Javascript"};
public MyFrame(String title){
super(title);
// 创建标签
JLabel label1 = new JLabel("请选择你喜欢的编程语言:");
getContentPane().add(label1, BorderLayout.NORTH);
// 列表组件
JList list = new JList(s1);
// 设置列表为单选
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// 注册项目选择事件监听器,采用匿名内部类
// list.addListSelectionListener(new ListSelectionListener() {
// @Override
// public void valueChanged(ListSelectionEvent e) {
// if (e.getValueIsAdjusting() == false){
//// 获取选择内容
// String itemString = (String) list.getSelectedValue();
// System.out.println(itemString);
// }
// }
// });
// 注册项目选择事件监听器,采用Lambda表达式
list.addListSelectionListener(e -> {
if (e.getValueIsAdjusting() == false){
// 获取选择内容
String itemString = (String) list.getSelectedValue();
System.out.println(itemString);
}
});
getContentPane().add(list,BorderLayout.CENTER);
// 设置窗口大小
setSize(300,200);
// 设置窗口可见
setVisible(true);
}
}
调用代码:
public class HelloWorld {
public static void main(String[] args) {
MyFrame myFrame = new MyFrame("列表");
}
}
运行结果:
六、分隔面板
Swing中提供了一种分隔面板(JSplitPane)组件,可以将屏幕分成左右或上下两部分。JSplitPane常用的构造方法有:
- JSplitPane(int newOrientation):创建一个分隔面板,参数newOrientation指定布局方向, newOrientation取值是JSplitPane.HORIZONTAL_SPLIT水平或JSplitPane.VERTICAL_SPLIT垂 直。
- JSplitPane(int newOrientation, Component newLeftComponent, Component newRightComponent): 创建一个分隔面板,参数newOrientation指定布局方向,newLeftComponent左侧面板组件, newRightComponent右侧面板组件。
下面通过示例介绍分隔面板组件:
import javax.swing.*;
import java.awt.*;
/**
* @author : 蔡政洁
* @email :[email protected]
* @date : 2020/2/24
* @time : 11:44 下午
*/
public class MyFrame extends JFrame {
private String[] data = {"景色1.jpeg","景色2.jpeg","景色3.jpeg","景色4.jpeg","景色5.jpeg","景色6.jpeg","景色7.jpeg","景色8.jpeg"};
public MyFrame(String title){
super(title);
// 右面面板
JPanel rightpanel = new JPanel();
rightpanel.setLayout(new BorderLayout(0,0));
JLabel lblImage = new JLabel();
lblImage.setHorizontalAlignment(SwingConstants.CENTER);
rightpanel.add(lblImage,BorderLayout.CENTER);
// 左面面板
JPanel leftpanel = new JPanel();
leftpanel.setLayout(new BorderLayout(0,0));
JLabel lblTextFieldLabel = new JLabel("选择景色图片:");
lblImage.add(lblTextFieldLabel,BorderLayout.NORTH);
// 列表组件
JList list = new JList(data);
// 设置成单选
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// 注册项目选择事件监听器,采用lambda表达式
list.addListSelectionListener(e -> {
if (e.getValueIsAdjusting()==false){
// 获得选择的内容
String itemString = (String) list.getSelectedValue();
// 获得图片的绝对路径
String Image = String.format("/Users/caizhengjie/Desktop/Swing相关图标/%s",itemString);
// 创建图片对象
Icon icon = new ImageIcon(Image);
lblImage.setIcon(icon);
}
});
leftpanel.add(list,BorderLayout.CENTER);
// 分隔面板
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,leftpanel,rightpanel);
splitPane.setDividerLocation(100);
getContentPane().add(splitPane,BorderLayout.CENTER);
// 设置窗口大小
setSize(960,640);
// 设置窗口可见
setVisible(true);
}
}
调用代码:
public class HelloWorld {
public static void main(String[] args) {
MyFrame myFrame = new MyFrame("分隔面板");
}
}
运行结果:
这里可以自己设置图片大小
七、表格
当有大量数据需要展示时,可以使用二维表格,有时也可以使用表格修改数据。表格是非常重要的组 件。Swing提供了表格组件JTable类,但是表格组件比较复杂,它的表现形式与数据分离的。Swing的 很多组件都是按照MVC设计模式进行设计的,JTable最有代表性,按照MVC设计理念JTable属于视 图,对应的模型是javax.swing.table.TableModel接口,根据自己的业务逻辑和数据实现TableModel接口 实现类。TableModel接口要求实现所有抽象方法,使用起来比较麻烦,有时只是使用很简单的表格, 此时可以使用AbstractTableModel抽象类。实际开发时需要继承AbstractTableModel抽象类。
JTable类常用的构造方法有:
- JTable(TableModel dm) :通过模型创建表格,dm是模型对象,其中包含了表格要显示的数据。
- JTable(Object[][] rowData, Object[] columnNames):通过二维数组和指定列名,创建一个表格对 象,rowData是表格中的数据,columnNames是列名。
- JTable(int numRows, int numColumns):指定行和列数创建一个空的表格对象。
这里先介绍通过二维数组和列名实现表格。这种方式创建表格不需要模型,实现起来比较简单。但是表格只能接受二维数组作为数据。
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
public class MyFrameTable extends JFrame {
// 获得当前屏幕的宽和高
private double screenWidth = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
private double screenHight = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
// 表格数据,二维数组
Object[][] rowdata = {{ "0036", "高等数学", "李放", "人民邮电出版社", "20000812", 1},
{"0004", "FLASH精选", "刘扬", "中国纺织出版社", "19990312", 2},
{"0026", "软件工程", "牛田", "经济科学出版社", "20000328", 4},
{"0015", "人工智能", "周未", "机械工业出版社", "19991223", 3},
{"0032", "SOL使用手册", "贺民", "电子工业出版社", "19990425", 2},
{"0031","python数据分析","张俊红","电子工业出版社","19990426",10},
{"0045","深入理解Java虚拟机","周志名","机械工业出版社","20100323",23}};
// 表格列名称
String[] columnsNames = {"书籍编号", "书籍名称", "作者", "出版社", "出版日期", "库存数量"};
private JTable table;
public MyFrameTable(String title){
super(title);
table = new JTable(rowdata,columnsNames);
// 设置表格中内容字体
table.setFont(new Font("微软雅黑",Font.PLAIN,16));
// 设置表列标题字体
table.getTableHeader().setFont(new Font("微软雅黑",Font.BOLD,16));
// 设置行高
table.setRowHeight(40);
// 设置为单行选中模式
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// 返回当前行的状态模型
ListSelectionModel rowSM = table.getSelectionModel();
// 注册监听器,选中行发生更改时触发,这里采用匿名内部类
rowSM.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
// 只处理鼠标按下
if (e.getValueIsAdjusting() == false){
return;
}
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
if (lsm.isSelectionEmpty()){
System.out.println("没有选中行");
}
else {
int selectedRow = lsm.getMinSelectionIndex();
System.out.println("第"+selectedRow+"行被选中");
}
}
});
// 创建一个滚动面板jScrollPane
JScrollPane jScrollPane = new JScrollPane();
// 把表格添加到滚动面板上
jScrollPane.setViewportView(table);
getContentPane().add(jScrollPane,BorderLayout.CENTER);
// 设置窗口大小
setSize(960,640);
// 计算窗口位于屏幕中心的坐标
int x = (int) (screenWidth-960) /2;
int y = (int) (screenHight-960) /2;
// 设置窗口位于屏幕中心的坐标
setLocation(x,y);
// 设置窗口可见
setVisible(true);
}
}
调用代码:
public class HelloWorld {
public static void main(String[] args) {
MyFrameTable myFrameTable = new MyFrameTable("表格");
}
}
运行结果:
这里由于数据太少没有显示滚动条,可以压缩窗口看见滚动条。
以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!