表格是 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 所示爲刪除兩行後的表格效果。
謝謝觀看