JTable的问题

panq 2001-09-21 10:06:50
想用两个JTable,都是列是一位的,中间有一个button,左边的JTable内已经有数据,且不能更改,右边的JTable各行为空,选中左边JTable中的一个record,点击中间的button,能够在右边JTable中出现该record。
各位大虾,这该如何做,给出思路和代码都好。
...全文
245 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
panq 2001-09-25
  • 打赏
  • 举报
回复
一切OK, 感谢lovesnoopy(洋葱头) 和rinehart(rinehart) 还有cming(白云蓝天)
也感谢一切gz的朋友,一概有分.
 
以下是我的调试程序.
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;

class UserTableModelListener implements TableModelListener {

public UserTableModelListener() {
}

public void tableChanged(TableModelEvent e) {
}
}

//然后继承DefaultTableModel,让JTable不能编辑.
class UserTableModel extends DefaultTableModel {
public UserTableModel(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 = {{"one"},{"two"},{"third"},{"four"},{"five"},{"six"},{"OIUDSF"},{"SDFSD"},{"SDFSD"},{"SDF"},{"panq"}};
Object[][] zerodata = new Object[0][0];
Object[] yourcolname = {"Table Name"};
lmodel = new UserTableModel(yourdata, yourcolname);
rmodel = new UserTableModel(zerodata, yourcolname);
ltable = new JTable(lmodel);
rtable = new JTable(rmodel);

JPanel contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(new FlowLayout());

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) {
add_actionPerformed(e);
}
});

contentPane.add(ltable);
contentPane.add(add);
contentPane.add(rtable);
}

void add_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);
}

static public void main(String[] args) {
YourApp newApp = new YourApp();
newApp.setSize(500,500);
newApp.show();
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
e.printStackTrace();
}
}

}
lovesnoopy 2001-09-24
  • 打赏
  • 举报
回复
sorry,原来的class叫CustomTableModel,copy后只改名,构造函数忘了改了。不好意思。
to panq: import javax.swing.table.DefaultTableModel;
wilddragon 2001-09-24
  • 打赏
  • 举报
回复
支持一把
rinehart 2001-09-24
  • 打赏
  • 举报
回复
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);
}

}

类名和构造函数名不一样,是不是这个问题!?
lovesnoopy 2001-09-23
  • 打赏
  • 举报
回复
我已经写得这么详细了(除了界面布局的代码),你还想要什么思路,代码?
cming 2001-09-23
  • 打赏
  • 举报
回复
代码没有办法写了。说说思路好了。
左边的jtable,当你选中的时候,你能得到所有被选中的行(所以可以几行一起到右边的jtable),
来个循环,取的所有的行号及值(不要怀疑,我都做过),同时右边的jtable插入行,行的值就是你从左边取出来的值。
呵呵,以你的功底一定很容易的。
panq 2001-09-23
  • 打赏
  • 举报
回复
to:lovesnoopy
实在抱歉,编译花了不少时间,实在是我蠢,怎么也不成功.请问DefaultTableModel是什么,我查javaAPI,查不到.

以下是出错的地点和内容:
class UserTableModel extends DefaultTableModel {

"YourApp.java": Error #: 300 : class DefaultTableModel not found in class dbdump.UserTableModel at line 26, column 32
panq 2001-09-22
  • 打赏
  • 举报
回复
gz
panq 2001-09-21
  • 打赏
  • 举报
回复
up
lovesnoopy 2001-09-21
  • 打赏
  • 举报
回复
首先实现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);
}
}
Jneu 2001-09-21
  • 打赏
  • 举报
回复
gz
mengyou 2001-09-21
  • 打赏
  • 举报
回复
gz
CanFly 2001-09-21
  • 打赏
  • 举报
回复
gz
panq 2001-09-21
  • 打赏
  • 举报
回复
up

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧