Swing學習22:Java Swing JTable

表格是 Swing 新增加的組件,主要功能是把數據以二維表格的形式顯示出來,並且允許用戶對錶格中的數據進行編輯。表格組件是最複雜的組件之一,它的表格模型功能非常強大、靈活而易於執行。由於篇幅有限,本節只介紹默認的表格模型。

Swing 使用 JTable 類實現表格,常用構造方法如下所示。

  • JTable():構造一個默認的 JTable,使用默認的數據模型、默認的列模型和默認的選擇模型對其進行初始化。
  • JTable(int numRows,int numColumns):使用 DefaultTableModel 構造具有 numRows 行和 numColumns 列個空單元格的 JTable。
  • JTable(Object[][] rowData,Object[] columnNames):構造一個 JTable 來顯示二 維數組 rowData 中的值,其列名稱爲 columnNames。

創建一個帶有滾動條的 JTable 對象非常簡單,如下所示。

JTable table=new JTable(5,6);
JScrollPane pane=new JScrollPane(table);

第一條語句創建了一個 JTable 對象。第二條語句創建了一個存放 JTable 對象的 JScrollPane 對象,該對象是一個視圖對象。JScrollPane是一個垂直和水平滾動條,以及可設置行和列標題的容器。上面兩行代碼執行後的表格效果如圖1 所示。
在這裏插入圖片描述
表格有很多的選項設置,因此 JTable 類常用方法也很多,這些常用方法如表 1 所示。
在這裏插入圖片描述
例 1
使用 JTable 類創建一個包含 8 列的學生成績表,並向表格中填充幾行數據,具體實現代碼如下所示。

import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class JTableDemo
{
    public static void main(String[] agrs)
    {
        JFrame frame=new JFrame("學生成績表");
        frame.setSize(500,200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container contentPane=frame.getContentPane();
        Object[][] tableDate=new Object[5][8];
        for(int i=0;i<5;i++)
        {
            tableDate[i][0]="1000"+i;
            for(int j=1;j<8;j++)
            {
                tableDate[i][j]=0;
            }
        }
        String[] name={"學號","軟件工程","Java","網絡","數據結構","數據庫","總成績","平均成績"};
        JTable table=new JTable(tableDate,name);
        contentPane.add(new JScrollPane(table));
        frame.setVisible(true);
    }
}

如上述代碼所示,表格組件和其他組件類似,可以方便地創建一個 JTable 對象。 如果 JTbale 對象直接添加到 JFrame 中,則表頭顯示不出來,需要把表格對象放入 JScrollPane 對象中,之後把 JScrollPane 對象添加到 JFrame 中。實例的運行效果如圖 2 所示。
在這裏插入圖片描述
例 2
Swing 中表格的數據可以根據需求動態變化,比如對於表格中不需要的數據,可以將其刪除。本實例將演示如何從表格中刪除用戶選擇的行,實現過程如下。

(1) 創建一個繼承自 JFrame 的 RowDeleteDemo 類。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
public class RowDeleteDemo extends JFrame
{
    private JPanel contentPane;
    private JTable table;
    /**
     * Launch the application.
     */
    public static void main(String[] args)
    {
        RowDeleteDemo frame = new RowDeleteDemo();
        frame.setVisible(true);
    }
    /**
     * Create the frame.
     */
}

(2) 在構造方法中增加表格,設置表格的數據模型,添加“刪除”按鈕並監聽單擊事件。實現代碼如下:

public RowDeleteDemo()
{
    addWindowListener(new WindowAdapter()
    {
        @Override
        public void windowActivated(WindowEvent e)
        {
            do_this_windowActivated(e);
        }
    });
    setTitle("圖書信息表");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100,100,450,200);
    contentPane=new JPanel();
    contentPane.setBorder(new EmptyBorder(5,5,5,5));
    contentPane.setLayout(new BorderLayout(0,0));
    setContentPane(contentPane);
    JPanel panel=new JPanel();
    contentPane.add(panel,BorderLayout.SOUTH);
    JButton button=new JButton("刪除");
    button.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            do_button_actionPerformed(e);
        }
    });
    panel.add(button);
    JScrollPane scrollPane=new JScrollPane();
    contentPane.add(scrollPane,BorderLayout.CENTER);
    table=new JTable();
    table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    scrollPane.setViewportView(table);
}

(3) 監聽窗體激活事件,完成向表中增加數據的功能。這裏使用了表格模型對象,它可以方便地處理表格中的數據。實現代碼如下:

protected void do_this_windowActivated(WindowEvent e)
{
    DefaultTableModel tableModel=(DefaultTableModel) table.getModel();    //獲得表格模型
    tableModel.setRowCount(0);    //清空表格中的數據
    tableModel.setColumnIdentifiers(new Object[]{"書名","出版社","出版時間","叢書類別","定價"});    //設置表頭
    tableModel.addRow(new Object[]{"Java從入門到精通(第2版)","清華大學出版社","2010-07-01","軟件工程師入門叢書","59.8元"});    //增加列
    tableModel.addRow(new Object[]{"PHP從入門到精通(第2版)","清華大學出版社","2010-07-01","軟件工程師入門叢書","69.8元"});
    tableModel.addRow(new Object[]{"Visual Basic從入門到精通(第2版)","清華大學出版社","2010-07-01","軟件工程師入門叢書","69.8元"});
    tableModel.addRow(new Object[]{"Visual C++從入門到精通(第2版)","清華大學出版社","2010-07-01","軟件工程師入門叢書","69.8元" });
    table.setRowHeight(30);
    table.setModel(tableModel);    //應用表格模型
}

(4) 監聽用戶單擊“刪除”按鈕事件,這裏通過 do_button_actionPerformed() 方法完成。在該方法中,首先獲取表格模型,然後獲得用戶選擇的行,再執行刪除數據操作。實現代碼如下:

protected void do_button_actionPerformed(ActionEvent e)
{
    DefaultTableModel model=(DefaultTableModel) table.getModel();    //獲得表格模型
    int[] selectedRows=table.getSelectedRows();
    for(int i=selectedRows[0];i<selectedRows.length;i++)
    {
        model.removeRow(selectedRows[0]);
    }
    table.setModel(model);
}

(5) 運行程序,默認在表格中會顯示所有數據,如圖 3 所示。圖 4 所示爲刪除兩行後的表格效果。
在這裏插入圖片描述

謝謝觀看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章