如何创建一个JTable?
(1)找到JTable类的构造方法:
使用:JTable(TableModel dm)构造方法
(2)找到TableModel接口的构造方法:
使用:TableModel接口的实现类DefaultTableModel类的构造方法
(3)构造参数Vector类型的data和columNames:
//声明表数据data
Vector<Vector<Object>> data=new Vector<Vector<Object>>();
//声明表头columnNames
Vector<String> columnNames=new Vector<String>();
为data添加表格数据、columnNames添加表头标题
//添加第一行表数据
Vector<Object> v1=new Vector<Object>();
v1.add("Jack");
v1.add(23);
data.add(v1);
//添加第二行表数据
Vector<Object> v2=new Vector<Object>();
v2.add("Rose");
v2.add(11);
data.add(v2);
//声明表头标题
columnNames.add("姓名");
columnNames.add("年龄");
(4)创建DefaultTableModel:
DefaultTableModel dtm=new DefaultTableModel(data, columnNames);
(5)创建JTable:
JTable jtable=new JTable(dtm);
至此,JTable创建完毕,接下来就是如何使用JTable!
如何交换JTable的表现层、数据层的数据?
(1)表现层:
setTitle("JTable演示");
setBounds(100, 200, 500, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=getContentPane();
//声明表数据data
Vector<Vector<Object>> data=new Vector<Vector<Object>>();
//添加第一行表数据
Vector<Object> v1=new Vector<Object>();
v1.add("Jack");
v1.add(23);
data.add(v1);
//添加第二行表数据
Vector<Object> v2=new Vector<Object>();
v2.add("Rose");
v2.add(11);
data.add(v2);
//声明表头columnNames
Vector<String> columnNames=new Vector<String>();
columnNames.add("姓名");
columnNames.add("年龄");
//创建dtm
final DefaultTableModel dtm=new DefaultTableModel(data, columnNames);
JTable jtable=new JTable(dtm);
c.add(new JScrollPane(jtable));
//用于逻辑层收集数据
JPanel jpl=new JPanel();
JLabel jlbName=new JLabel("姓名");
jpl.add(jlbName);
final JTextField tfdName=new JTextField(10);
jpl.add(tfdName);
JLabel jlbAge=new JLabel("年龄");
jpl.add(jlbAge);
final JTextField tfdAge=new JTextField(10);
jpl.add(tfdAge);
c.add(jpl,BorderLayout.SOUTH);
setVisible(true);
(2)逻辑层:
逻辑层—-添加按钮的监听
//逻辑层----添加按钮的监听
JButton btnAdd=new JButton("添加");
jpl.add(btnAdd);
btnAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//收集数据
String name=tfdName.getText();
String age=tfdAge.getText();
//组织数据-----将收集好的数据,封装为一行
Vector<Object> rowData=new Vector<Object>();
rowData.add(name);
rowData.add(age);
//添加到整个dtm中
dtm.addRow(rowData);
}
});
执行结果:
完整代码示例:::
package teachDemo;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class JTableDemo extends JFrame{
public JTableDemo(){
setTitle("JTable演示");
setBounds(100, 200, 500, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=getContentPane();
//声明表数据data
Vector<Vector<Object>> data=new Vector<Vector<Object>>();
//添加第一行表数据
Vector<Object> v1=new Vector<Object>();
v1.add("Jack");
v1.add(23);
data.add(v1);
//添加第二行表数据
Vector<Object> v2=new Vector<Object>();
v2.add("Rose");
v2.add(11);
data.add(v2);
//声明表头columnNames
Vector<String> columnNames=new Vector<String>();
columnNames.add("姓名");
columnNames.add("年龄");
//创建dtm
final DefaultTableModel dtm=new DefaultTableModel(data, columnNames);
JTable jtable=new JTable(dtm);
c.add(new JScrollPane(jtable));
//用于逻辑层收集数据
JPanel jpl=new JPanel();
JLabel jlbName=new JLabel("姓名");
jpl.add(jlbName);
final JTextField tfdName=new JTextField(10);
jpl.add(tfdName);
JLabel jlbAge=new JLabel("年龄");
jpl.add(jlbAge);
final JTextField tfdAge=new JTextField(10);
jpl.add(tfdAge);
//逻辑层
JButton btnAdd=new JButton("添加");
jpl.add(btnAdd);
btnAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//收集数据
String name=tfdName.getText();
String age=tfdAge.getText();
//组织数据-----将收集好的数据,封装为一行
Vector<Object> rowData=new Vector<Object>();
rowData.add(name);
rowData.add(age);
//添加到整个dtm中
dtm.addRow(rowData);
}
});
c.add(jpl,BorderLayout.SOUTH);
setVisible(true);
}
public static void main(String[] args) {
new JTableDemo();
}
}