当前位置: 技术问答>java相关
JTable的问题
来源: 互联网 发布时间:2015-02-06
本文导语: 想用两个JTable,都是列是一位的,中间有一个button,左边的JTable内已经有数据,且不能更改,右边的JTable各行为空,选中左边JTable中的一个record,点击中间的button,能够在右边JTable中出现该record。 各位大虾,这该如何做...
想用两个JTable,都是列是一位的,中间有一个button,左边的JTable内已经有数据,且不能更改,右边的JTable各行为空,选中左边JTable中的一个record,点击中间的button,能够在右边JTable中出现该record。
各位大虾,这该如何做,给出思路和代码都好。
各位大虾,这该如何做,给出思路和代码都好。
|
首先实现TableModelListener(其实什么事也不用做,但是只有这样 JTable的数据显示才会更新)
class UserTableModelListener implements TableModelListener {
public UserTableModelListener() {
}
public void tableChanged(TableModelEvent e) {
}
}
然后继承DefaultTableModel,让JTable不能编辑.
class UserTableModel extends DefaultTableModel {
public CustomTableModel(Object[][] data, Object[] colname) {
super(data, colname);
}
public boolean isCellEditable(int x, int y) {
return false;
}
public void addTableModelListener(UserTableModelListener l) {
super.addTableModelListener(l);
}
}
这是你的frame
public class YourApp extends JFrame
{
JTable ltable = null;
JTable rtable = null;
UserTableModel lmodel = null;
UserTableModel rmodel = null;
public YourApp() {
try {
yourInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void yourInit() throws Exception {
Object[][] yourdata = yourdata;
Object[][] zerodata = new Object[0][0];
Object[] yourcolname = yourcolname;
lmodel = new UserTableModel(yourdata, yourcolname);
rmodel = new UserTableModel(zerodata, yourcolname);
ltable = new JTable(lmodel);
rtable = new JTable(rmmodel);
lmodel.addTableModelListener(new UserTableModelListener());
rmodel.addTableModelListener(new UserTableModelListener());
JButton add = new JButton("add");
add.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
actionPerformed(e);
}
});
}
void actionPerformed(ActionEvent e) {
int row = ltable.getSelectedRow();
String[] data = new String[1];
data[0] = (String)ltable.getValueAt(row, 0);
lmodel.removeRow(row);
rmodel.addRow(data);
}
}
class UserTableModelListener implements TableModelListener {
public UserTableModelListener() {
}
public void tableChanged(TableModelEvent e) {
}
}
然后继承DefaultTableModel,让JTable不能编辑.
class UserTableModel extends DefaultTableModel {
public CustomTableModel(Object[][] data, Object[] colname) {
super(data, colname);
}
public boolean isCellEditable(int x, int y) {
return false;
}
public void addTableModelListener(UserTableModelListener l) {
super.addTableModelListener(l);
}
}
这是你的frame
public class YourApp extends JFrame
{
JTable ltable = null;
JTable rtable = null;
UserTableModel lmodel = null;
UserTableModel rmodel = null;
public YourApp() {
try {
yourInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void yourInit() throws Exception {
Object[][] yourdata = yourdata;
Object[][] zerodata = new Object[0][0];
Object[] yourcolname = yourcolname;
lmodel = new UserTableModel(yourdata, yourcolname);
rmodel = new UserTableModel(zerodata, yourcolname);
ltable = new JTable(lmodel);
rtable = new JTable(rmmodel);
lmodel.addTableModelListener(new UserTableModelListener());
rmodel.addTableModelListener(new UserTableModelListener());
JButton add = new JButton("add");
add.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
actionPerformed(e);
}
});
}
void actionPerformed(ActionEvent e) {
int row = ltable.getSelectedRow();
String[] data = new String[1];
data[0] = (String)ltable.getValueAt(row, 0);
lmodel.removeRow(row);
rmodel.addRow(data);
}
}
|
代码没有办法写了。说说思路好了。
左边的jtable,当你选中的时候,你能得到所有被选中的行(所以可以几行一起到右边的jtable),
来个循环,取的所有的行号及值(不要怀疑,我都做过),同时右边的jtable插入行,行的值就是你从左边取出来的值。
呵呵,以你的功底一定很容易的。
左边的jtable,当你选中的时候,你能得到所有被选中的行(所以可以几行一起到右边的jtable),
来个循环,取的所有的行号及值(不要怀疑,我都做过),同时右边的jtable插入行,行的值就是你从左边取出来的值。
呵呵,以你的功底一定很容易的。
|
DefaultTableModel是java 的 api!
这一段有点问题:
然后继承DefaultTableModel,让JTable不能编辑.
class UserTableModel extends DefaultTableModel {
~~~~~~~~~~~~~~
public CustomTableModel(Object[][] data, Object[] colname) {
~~~~~~~~~~~~~~~~
super(data, colname);
}
public boolean isCellEditable(int x, int y) {
return false;
}
public void addTableModelListener(UserTableModelListener l) {
super.addTableModelListener(l);
}
}
类名和构造函数名不一样,是不是这个问题!?
这一段有点问题:
然后继承DefaultTableModel,让JTable不能编辑.
class UserTableModel extends DefaultTableModel {
~~~~~~~~~~~~~~
public CustomTableModel(Object[][] data, Object[] colname) {
~~~~~~~~~~~~~~~~
super(data, colname);
}
public boolean isCellEditable(int x, int y) {
return false;
}
public void addTableModelListener(UserTableModelListener l) {
super.addTableModelListener(l);
}
}
类名和构造函数名不一样,是不是这个问题!?
|
sorry,原来的class叫CustomTableModel,copy后只改名,构造函数忘了改了。不好意思。
to panq: import javax.swing.table.DefaultTableModel;
to panq: import javax.swing.table.DefaultTableModel;
|
支持一把
|
gz
|
gz
|
gz
|
我已经写得这么详细了(除了界面布局的代码),你还想要什么思路,代码?