📄 tabledialog.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 + -