Java中表格组件JTable是最常用的,其属性也比较多,相对于其他组件来说要复杂些,对于初学者来说也是比较头痛的,下面写个例子简单的说明它的一些用法:这是我一个项目的内部窗口,不能单独运行。
package frames;
import java.awt.EventQueue;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import javax.swing.BorderFactory;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.SwingConstants;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import mold.Type;
import dao.DbUtil;
import java.awt.Dimension;
import javax.swing.JTable;
import javax.swing.border.Border;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
public class TypeAdd extends JInternalFrame {
private JTextField textField_1;
private JLabel label;
private JTable table;
private JButton button;
String[] COLUMN={"物料编号","物料名称"};//表格的列
private JPopupMenu pop;//弹出菜单,用于单击鼠标右键弹出选择菜单删除表格中选中的行
private JMenuItem delete,modif;
private Object[][] result;
private DefaultTableModel model;//声明定义表格的模型
private Object[][] getFileStates(List list){ //获取二维数组的方法
Object[][] types=new Object[list.size()][2];
for(int i=0;i<list.size();i++){
Type type=(Type) list.get(i);
types[i][0]=type.getToolid();
types[i][1]=type.getToolname();
}
return types;
}
/**
* Create the frame.
*/
public TypeAdd() {
setTitle("材料种类添加");
setBounds(100, 100, 483, 391);
setClosable(true);
setIconifiable(true);
pop = new JPopupMenu();//初始化弹出菜单
pop.add(delete = new JMenuItem("删除"));
delete.addActionListener(new ActionListener() { //给删除菜单项添加动作监听器
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
int i=table.getSelectedRow();
String name=(String) table.getValueAt(i, 1);
int x=0;
x=DbUtil.delType(name);
if(x>0){
String message="成功删除"+x+"项";
JOptionPane.showMessageDialog(null,message);
//下面几行代码用于当我们删除了表格行时实时更新表格
result=getFileStates(DbUtil.selectTools());
model=new DefaultTableModel(result,COLUMN);
table.setModel(model);
TableColumnModel columnModel=table.getColumnModel();//设置列宽
TableColumn column = columnModel.getColumn(0);
column.setPreferredWidth(100);
TableColumn column1 = columnModel.getColumn(1);
column1.setPreferredWidth(200);
table.setColumnModel(columnModel);
}
}
});
pop.add(modif = new JMenuItem("修改"));
JPanel panel2 = new JPanel();
Font font=new Font("宋体", Font.BOLD | Font.ITALIC, 18);
label = new JLabel("物品名称:");
label.setFont(font);
textField_1=new JTextField(30);
textField_1.setFont(font);
textField_1.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
// TODO 自动生成的方法存根
if(e.getKeyCode()==KeyEvent.VK_ENTER){
button.doClick();
super.keyPressed(e);
}
}
});
panel2.add(label);
panel2.add(textField_1);
getContentPane().add(panel2, BorderLayout.NORTH);
JPanel panel = new JPanel();
Border border=BorderFactory.createTitledBorder("已添加种类一览");
panel.setBorder(border);
getContentPane().add(panel, BorderLayout.CENTER);
final JScrollPane scrollPane=new JScrollPane();
scrollPane.setPreferredSize(new Dimension(360,200));
panel.add(scrollPane);
result=getFileStates(DbUtil.selectTools());//调用方法从数据库中获取数据
model=new DefaultTableModel(result,COLUMN);//初始化模型
table = new JTable();
table.setModel(model);//把模型绑定到表格
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);//设置表格大小改变自动变化模型
table.setGridColor(Color.red);//设置表格中网格线颜色
table.setRowHeight(30);//设置行高
table.setRowMargin(10);//设置行间距
table.setFont(new Font("宋体", Font.BOLD,18));//设置字体
DefaultTableCellRenderer cr=new DefaultTableCellRenderer();//设置单元格居中显示
cr.setHorizontalAlignment(SwingConstants.CENTER);
table.setDefaultRenderer(Object.class, cr);
JTableHeader tableHeader = table.getTableHeader();
tableHeader.setReorderingAllowed(false);//设置表格列不可移动
DefaultTableCellRenderer hr = (DefaultTableCellRenderer) tableHeader
.getDefaultRenderer();
hr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);//列名居中
TableColumnModel columnModel=table.getColumnModel();//设置列宽
TableColumn column = columnModel.getColumn(0);//默认各个列是等宽的
column.setPreferredWidth(100);
TableColumn column1 = columnModel.getColumn(1);
column1.setPreferredWidth(200);
table.setColumnModel(columnModel);
scrollPane.setViewportView(table);
table.addMouseListener(new MouseAdapter() {//给表格添加鼠标监听器
@Override
public void mousePressed(MouseEvent e) {//鼠标右击弹出菜单
// TODO 自动生成的方法存根
if(e.getButton()==MouseEvent.BUTTON3){
pop.show(table,e.getX(),e.getY());
}
super.mousePressed(e);
}
});
JPanel panel_1 = new JPanel();
getContentPane().add(panel_1, BorderLayout.SOUTH);
button = new JButton("添加");
button.setPreferredSize(new Dimension(120, 40));
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
if(DbUtil.selectToolsName().contains(textField_1.getText())){
JOptionPane.showMessageDialog(null, "物料种类已存在!!!");
return;
}
int i=0;
i=DbUtil.addType(textField_1.getText());
if(i==1){
JOptionPane.showMessageDialog(null, "添加成功!!!");
doDefaultCloseAction();
}
}
});
panel_1.add(button);
JButton button_1 = new JButton("取消");
button_1.setPreferredSize(new Dimension(120, 40));
button_1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
doDefaultCloseAction();
}
});
panel_1.add(button_1);
setVisible(true);
}
}
程序运行效果图
转载于:https://blog.51cto.com/11077203/1867210