⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tabledialog.java

📁 完整的JAVA工程
💻 JAVA
字号:
package employee;

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDialog;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.DefaultCellEditor;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.JLabel;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JComboBox;
import javax.swing.JCheckBox;
import javax.swing.JButton;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

class TableDialog extends JDialog implements ActionListener,ListSelectionListener{
	GridBagLayout gridBagLayout1=new GridBagLayout();
	GridBagConstraints gridBagConstraints1=new GridBagConstraints();
	JScrollPane jScrollPane1=new JScrollPane();
	//表格的列头标题
	final String []columnName={"姓名","月薪","部门","领取状态"};
	//表格的初始单元数据
	final Object [][]columnData={
		{"汤佐天",new Integer(2000),"软件部",new Boolean(true)},
		{"任伟",new Integer(6500),"局长室",new Boolean(false)},
	};
	//作为新插入行的默认值
	final Object []oneRow={"",new Integer(2000),"工程部",new Boolean(false)};
	//创建一个用来初始化和访问表格单元数据的DefaultTableModel对象
	DefaultTableModel dtm=new DefaultTableModel(columnData,columnName){
		//重载用来获得表格每列数据类型的getColumnClass方法,这样"领取状态"一列的复合框可显示出来
		public Class getColumnClass(int c){return getValueAt(0,c).getClass();}
		//若希望表格只读,可修改下面方法的返回值为false
		public boolean isCellEditable(int row,int col){return true;}
	};
	//创建表格的行选择模式对象
	DefaultListSelectionModel dlsm=new DefaultListSelectionModel();
	JTable jTableView=new JTable(dtm);//利用dtm对象创建一个JTable表格
	EditPane editPane1=new EditPane();//创建一个布置了三个按钮的面板
	int current_row;//存放表格的当前行
	
	public TableDialog(){
		this.setTitle("JTable表格示例");
		this.setSize(400,180);
		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		//创建用于表格"部门"一列的组合框
		JComboBox comboBox1=new JComboBox();
		comboBox1.addItem("软件部");
		comboBox1.addItem("工程部");
		comboBox1.addItem("局长室");
		comboBox1.addItem("商务部");
		TableColumn departmentColumn=jTableView.getColumn("部门");
		//采用组合框为该列的编译器
		departmentColumn.setCellEditor(new DefaultCellEditor(comboBox1));
		//设置"部门"一列的背景色和提示文字条
		DefaultTableCellRenderer departmentColumnRenderer=new DefaultTableCellRenderer();
		departmentColumnRenderer.setBackground(Color.yellow);
		departmentColumnRenderer.setToolTipText("点击该列的组合框以选择部门");
		departmentColumn.setCellRenderer(departmentColumnRenderer);
		//设置"月薪"一列的特性:如果金额〉=5000,将红色字体显示。
		TableColumn moneyColumn=jTableView.getColumn("月薪");
		DefaultTableCellRenderer moneyColumnRenderer=new DefaultTableCellRenderer(){
			//重载setValue方法,以动态设置列单元的字体颜色
			public void setValue(Object value){
				int cellValue=(value instanceof Number)?((Number)value).intValue():0;
				setForeground((cellValue<5000)?Color.black:Color.red);
				setText((value==null)?"":value.toString());
			}
		};
		//设置"月薪"一列的数字为右对齐
		moneyColumnRenderer.setHorizontalAlignment(JLabel.RIGHT);
		moneyColumn.setCellRenderer(moneyColumnRenderer);
		moneyColumn.setPreferredWidth(120);//设置该列宽度
		jTableView.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		//在对话框中布置表格控件
		getContentPane().setLayout(gridBagLayout1);
		gridBagConstraints1.gridx=0;
		gridBagConstraints1.gridy=0;
		gridBagConstraints1.weightx=100;
		gridBagConstraints1.weighty=90;
		gridBagConstraints1.fill=GridBagConstraints.BOTH;
		gridBagLayout1.setConstraints(jScrollPane1,gridBagConstraints1);
		getContentPane().add(jScrollPane1);//添加滚动条面板
		jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		jScrollPane1.getViewport().setView(jTableView);//把表格插入滚动条面板
		//在对话框的下部添加布置了三个按钮的面板
		gridBagConstraints1.gridx=0;
		gridBagConstraints1.gridy=1;
		gridBagConstraints1.weightx=100;
		gridBagConstraints1.weighty=10;
		gridBagConstraints1.fill=GridBagConstraints.BOTH;
		gridBagLayout1.setConstraints(editPane1,gridBagConstraints1);
		getContentPane().add(editPane1);
		//为按钮添加鼠标单击监听器
		editPane1.jButton1.addActionListener(this);
		editPane1.jButton2.addActionListener(this);
		editPane1.jButton3.addActionListener(this);
		//为行选择模式添加行选择监听器
		dlsm.addListSelectionListener(this);
		jTableView.setSelectionModel(dlsm);//设置表格的行选择模式
	}
	public void actionPerformed(ActionEvent e){//按钮的事件处理代码
	    Object srcObj=e.getSource();
	    if(srcObj==editPane1.jButton1){
	    	dtm.addRow(oneRow);//在表格底部中添加一个默认行
	    }
	    else if(srcObj==editPane1.jButton2)dtm.removeRow(jTableView.getSelectedRow());//删除表格当前行
	    else if(srcObj==editPane1.jButton3){
	    	current_row=jTableView.getSelectedRow();
	           if(current_row!=-1)
	           System.out.println(dtm.getValueAt(current_row,0)+":工资为"+dtm.getValueAt(current_row,1));
	    }
	        
	}
	public void valueChanged(ListSelectionEvent e){
		current_row=jTableView.getSelectedRow();
		System.out.println(dtm.getValueAt(current_row,0)+":工资为"+dtm.getValueAt(current_row,1));
		
	}
	public static void main(String[] args){
		TableDialog tableDialog1=new TableDialog();
		tableDialog1.setVisible(true);
	}
}
class EditPane extends JPanel{
	FlowLayout flowLayout1=new FlowLayout();
	JButton jButton1=new JButton("插入一行");
	JButton jButton2=new JButton("删除一行");
	JButton jButton3=new JButton("打印当前行");
	EditPane(){
		this.add(jButton1);
		this.add(jButton2);
		this.add(jButton3);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -