Swing components (lower)

V. List

Swing provides a list (the JList) assembly, may be selected from single or multiple.
JList conventional construction methods:

  • JList (): create a list of objects.
  • JList (Object [] listData): create a list of objects, listData list of settings options. Option list content can be of any type, and no longer limited to String.

The following list of components described by way of example:

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);
    }
}

Calling code:

public class HelloWorld {
    public static void main(String[] args) {
        MyFrame myFrame = new MyFrame("列表");
    }
}

operation result:
Here Insert Picture Description

Six separate panel

Swing provides for a partition panel (the JSplitPane) assembly, the screen may be divided into two parts horizontally or vertically. JSplitPane conventional construction methods:

  • JSplitPane (int newOrientation): create a partition panel, newOrientation parameter specifies the layout direction, the value is JSplitPane.HORIZONTAL_SPLIT newOrientation JSplitPane.VERTICAL_SPLIT horizontal or vertical.
  • JSplitPane (int newOrientation, Component newLeftComponent, Component newRightComponent): create a partition panel, newOrientation parameter specifies the layout direction, newLeftComponent left side panel assembly, newRightComponent right side panel assembly.

The following describes the partition panel assembly by way of example:

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);
    }
}

Calling code:

public class HelloWorld {
    public static void main(String[] args) {
        MyFrame myFrame = new MyFrame("分隔面板");
    }
}

The result:
Here Insert Picture Description
Here you can set your own image size

Seven tables

当有大量数据需要展示时,可以使用二维表格,有时也可以使用表格修改数据。表格是非常重要的组 件。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("表格");
    }
}

运行结果:
Here Insert Picture Description
这里由于数据太少没有显示滚动条,可以压缩窗口看见滚动条。

以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!

Published 68 original articles · won praise 7 · views 3284

Guess you like

Origin blog.csdn.net/weixin_45366499/article/details/104505440
Recommended