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

运行截图:

posted @ 2020-01-07 21:15  z全  阅读(78)  评论(0)    收藏  举报