JTable里怎么得到修改后单元格里的值

Java新手,对JTable知之甚少,现在做一个表格,比如说用户修改了表格中某一单元格的值,如何得到修改后的数据?尝试用getValueAt(intr,intc),可是得... Java新手,对JTable知之甚少,现在做一个表格,比如说用户修改了表格中某一单元格的值,如何得到修改后的数据?

尝试用getValueAt(int r, int c),可是得到的还是修改以前的数据?

请问应该怎么写?有没有较通用的这方面的代码?是要用tablemodel么?
展开
 我来答
resong27lhk
推荐于2016-12-01 · TA获得超过157个赞
知道答主
回答量:42
采纳率:0%
帮助的人:68.9万
展开全部
就是用getValueAt(int r, int c)啊!
用户一旦修改了表的数据,你在监听器里,得到那个table的对象,就可以之间用这个getValueAt方法的
如果还是修改之前的,可能有几个可能:
1.那条数据并没有真正的修改到了table中,这种情况也是最常见的错误
解决方法:
修改数据不能用简单的setValueAt()方法,而是应该对tablemodel里面的数据做修改,然后setModel(Model),这样传回去的table才是真正已经修改过数据的table,否则就不是,这也是大家都用的方法
2.自己的监听器写错了,可能在监听器里部分代码有问题

其他,应该没有问题了,你看下吧,估计是你的table数据没有真正的插入到table中,不是真正的修改数据,也就是说,你 没有用到setModel()方法,而是直接在界面上点击修改数据,没有用到监听器去setModel()
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hardneedl
2010-08-08 · TA获得超过921个赞
知道小有建树答主
回答量:1353
采纳率:57%
帮助的人:606万
展开全部
如果认可,请您赏分 60分,谢谢
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
/**
* @author Hardneedl
*/
final class TableCellDemoFrame extends JFrame {
private static final Dimension minSize = new Dimension(300, 200);
private static final Dimension maxSize = new Dimension(1024, 768);
private static final Dimension preferredSize = new Dimension(600, 400);
public Dimension getMaximumSize() {return maxSize;}
public Dimension getMinimumSize() {return minSize;}
public Dimension getPreferredSize() {return preferredSize;}
public String getTitle() {return "Table Cell DEMO";}

private JTable table;

private class _TableModel extends AbstractTableModel {
private Color c0=Color.BLUE,c1=Color.RED;
public String getColumnName(int column) {
switch(column){
case 0:return "COLORS";
default:return "";
}
}

public Class<?> getColumnClass(int columnIndex) {
switch(columnIndex){
case 0:return Color.class;
default:return Object.class;
}
}

public int getRowCount() {return 2;}
public int getColumnCount() {return 1;}
public Object getValueAt(int rowIndex, int columnIndex) {
switch(rowIndex){
case 0:return c0;
case 1:return c1;
default:return null;
}
}

public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
switch(rowIndex){
case 0:c0 = (Color)aValue;break;
case 1:c1=(Color)aValue;break;
}
fireTableDataChanged();
}
public boolean isCellEditable(int r, int c) {return c == 0;}
}

TableCellDemoFrame() throws HeadlessException {
init();
doLay();
attachListeners();
}

private void init() {
table = new JTable(new _TableModel());
TableColumn column = table.getColumnModel().getColumn(0);
column.setCellRenderer(
new TableCellRenderer (){
private JLabel L = new JLabel(){
public boolean isOpaque() {
return true;
}
};
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
L.setBackground((Color)value);
return L;
}
}
);

JComboBox box = new JComboBox(new Color[]{Color.RED,Color.BLUE,Color.ORANGE,Color.PINK,Color.yellow,Color.CYAN});
box.setRenderer(new ListCellRenderer(){
private JLabel L = new JLabel(){
public boolean isOpaque() {return true;}
public Color getForeground() {return Color.WHITE;}
};
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
L.setText(value.toString());
if (value instanceof Color) L.setBackground((Color)value);

return L;
}
});
column.setCellEditor(new DefaultCellEditor(box));
}
private void doLay() {
Container container = getContentPane();
container.add(new JScrollPane(table), BorderLayout.CENTER);
pack();
}

private void attachListeners() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {new TableCellDemoFrame().setVisible(true);}
});
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
5105201314
2018-04-17 · TA获得超过177个赞
知道答主
回答量:87
采纳率:20%
帮助的人:6.6万
展开全部
唉,我知道你肯定已经解决了,我也遇到了同样的问题,搞了我2小时了,网上人都是说什么setModel,什么setValueAt()。确实,是使用setValueAt()才能真正改变表格单元格的值。但是我们既然要获取修改后的值,怎么能用setValueAt()呢,如果要用setValueAt()也是等我获取到了修改后的值啊.他们网上那么多人说了一大堆,setValueAt().却没说关键步骤.我的解决方法是,给表格模型加tableListener监听,重写tableChanged方法,在tableChanged方法里面用getValueAt()获取的就是表格修改后的值,然后再setValueAt修改到表格模型上,那么就真正的修改了表格单元格的值.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式