2019.10.31
1、(50分)分别用三种方式创建表格,3种代码都在PPT里面,其中第三种方式“带滚动条面板的表格”还可参考教材P381例21.1,效果如下:

代码1:
package MyTable;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.JTableHeader;
public class Created1 {
JFrame f;
JTable table;
JTableHeader tableheader;
String[][]data={{"陈峰","男","19","党员"},
{"田一飞","男","18","团员"},
{"胡锦","女","19","党员"}};
String[]columnNames={"姓名","性别","年龄","政治面貌"};
public Created1(){
f=new JFrame();
table=new JTable(data,columnNames);
tableheader=table.getTableHeader();
f.setVisible(true);
f.setBounds(100, 100, 250, 150);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(tableheader,BorderLayout.NORTH);
f.add(table,BorderLayout.CENTER);
}
public static void main(String[] args){
new Created1();
}
}
代码2:
package MyTable;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.JTableHeader;
public class Created2 {
JFrame f;
JScrollPane sf;
JTable table;
String[][]data={{"陈峰","男","19","党员"},
{"田一飞","男","18","团员"},
{"胡锦","女","19","党员"}};
String[]columnNames={"姓名","性别","年龄","政治面貌"};
public Created2(){
f=new JFrame();
table=new JTable(data,columnNames);
f.setVisible(true);
f.setBounds(100, 100, 250, 150);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sf=new JScrollPane(table);
f.add(sf,BorderLayout.CENTER);
}
public static void main(String[] args){
new Created2();
}
}
代码3:
package MyTable;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableRowSorter;
public class Created3 {
JFrame f;
JScrollPane sf;
JTable table;
DefaultTableModel tableModel;
String[][]data={{"陈峰","男","19","党员"},
{"田一飞","男","18","团员"},
{"胡锦","女","19","党员"}};
String[]columnNames={"姓名","性别","年龄","政治面貌"};
public Created3(){
f=new JFrame();
tableModel=new DefaultTableModel(data,columnNames);
table=new JTable(tableModel);
table.setRowSorter(new TableRowSorter(tableModel));
f.setVisible(true);
f.setBounds(100, 100, 250, 150);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sf=new JScrollPane(table);
f.add(sf,BorderLayout.CENTER);
}
public static void main(String[] args){
new Created3();
}
}
运行截图:

2、利用DefaultTableModel类的表格模型创建表格(关键代码参考书390页【例21.5】),效果如下:(20分)
学号 姓名 年龄 专业
20172001 张三 18 软件工程
20172002 李四 19 软件工程
20172003 王五 19 软件工程
20172004 赵六 18 软件工程
(1)给表格设置排序器。(关键代码参考书390页【例21.5】)(10分)
创建排序器写成以下即可:
table.setRowSorter(new TableRowSorter(tableModel));
(2)增加按钮,实现表格数据的增加、修改和删除。(参考教材P391【例21.6】)(20分)

代码:
package MyTable;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class Example_Table1 {
JFrame f;
JScrollPane sf;
JPanel p;
JButton b1,b2,b3;
JLabel l1,l2,l3,l4;
JTextField t1,t2,t3,t4;
JTable table;
DefaultTableModel tableModel;
String[][]data={{"20172001","张三","18","软件工程"},
{"20172002","李四","19","软件工程"},
{"20172003","王五","19","软件工程"},
{"20172004","赵六","18","软件工程"}};
String[] columnNames={"学号","姓名","年龄","专业"};
public Example_Table1(){
f=new JFrame();
p=new JPanel();
b1=new JButton("添加");
b2=new JButton("修改");
b3=new JButton("删除");
l1=new JLabel("学号:");
l2=new JLabel("姓名:");
l3=new JLabel("年龄:");
l4=new JLabel("专业:");
t1=new JTextField(6);
t2=new JTextField(6);
t3=new JTextField(6);
t4=new JTextField(6);
tableModel=new DefaultTableModel(data,columnNames);
table=new JTable(tableModel);
sf=new JScrollPane(table);
f.setVisible(true);
f.setBounds(400, 200, 640, 300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
table.setRowSorter(new TableRowSorter(tableModel));
f.add(sf,BorderLayout.CENTER);
f.add(p,BorderLayout.SOUTH);
p.add(l1);
p.add(t1);
p.add(l2);
p.add(t2);
p.add(l3);
p.add(t3);
p.add(l4);
p.add(t4);
p.add(b1);
p.add(b2);
p.add(b3);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String[] rowvaule= {t1.getText(),t2.getText(),t3.getText(),t4.getText()};
tableModel.addRow(rowvaule);
t1.setText("");
t2.setText("");
t3.setText("");
t4.setText("");
}
});
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int selectedrow=table.getSelectedRow();
if(selectedrow!=-1) {
tableModel.setValueAt(t1.getText(), selectedrow, 0);
tableModel.setValueAt(t2.getText(), selectedrow, 1);
tableModel.setValueAt(t3.getText(), selectedrow, 2);
tableModel.setValueAt(t4.getText(), selectedrow, 3);
t1.setText("");
t2.setText("");
t3.setText("");
t4.setText("");
}
}
});
b3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int selectionrow=table.getSelectedRow();
if(selectionrow!=-1) {
tableModel.removeRow(selectionrow);
}
}
});
}
public static void main(String[] args){
new Example_Table1();
}
}
运行截图:


3、(选作!20分)通过继承AbstractTableModel类创建表格,效果如题2所示。
代码:
package MyTable;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.*;
public class Example_Table3 extends AbstractTableModel{
String[][]data={{"20172001","张三","18","软件工程"},
{"20172002","李四","19","软件工程"},
{"20172003","王五","19","软件工程"},
{"20172004","赵六","18","软件工程"}};
String[] columnNames={"学号","姓名","年龄","专业"};
public int getRowCount() {
return data.length;
}
public int getColumnCount() {
return columnNames.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}
public String getColumnNames(int col){
return columnNames[col];
}
public static void main(String[] args){
Example_Table3 tm=new Example_Table3();
JTable table=new JTable(tm);
table.setRowHeight(25);
JScrollPane pane=new JScrollPane(table);
JFrame f=new JFrame();
f.setBounds(400,300,300,200);
f.add(pane,BorderLayout.CENTER);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
代码截图:

4、(选作!30分)通过继承AbstractTableModel类创建表格,并增加“显示”按钮的事件响应(单击“显示”时,在控制台显示表格的所有记录),效果如下图所示:


代码:
package MyTable;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.*;
public class Example_Table2 extends AbstractTableModel{
String[][]data={{"20172001","张三","18","软件工程"},
{"20172002","李四","19","软件工程"},
{"20172003","王五","19","软件工程"},
{"20172004","赵六","18","软件工程"}};
String[] columnNames={"学号","姓名","年龄","专业"};
public int getRowCount() {
return data.length;
}
public int getColumnCount() {
return columnNames.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}
public String getColumnNames(int col){
return columnNames[col];
}
public static void main(String[] args){
Example_Table2 tm=new Example_Table2();
JTable table=new JTable(tm);
table.setRowHeight(25);
JScrollPane pane=new JScrollPane(table);
JFrame f=new JFrame();
f.setBounds(400,300,300,200);
f.add(pane,BorderLayout.CENTER);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton b=new JButton("显示");
f.add(b,BorderLayout.SOUTH);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for(int i=0;i<table.getRowCount();i++) {
for(int j=0;j<table.getColumnCount();j++) {
System.out.print(table.getValueAt(i,j));
System.out.print("\t");
if(j==table.getColumnCount()-1) {
System.out.println();
}
}
}
}
});
}
}
运行截图:



浙公网安备 33010602011771号