佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1159|回复: 9

Java的JTable疑问

[复制链接]
发表于 2-3-2009 07:39 PM | 显示全部楼层 |阅读模式
我要create一个table然后让用户填资料,当用户填完了就按update button以便把资料写进txt file。问题是我发现当用户填了第一个cell然后去另一个cell,第一个cell才会被update进tablemodel的。如此一来,如果有五个cell,当用户填第五个cell然后直接按update button的话,第五个cell的出来的value竟然是null。唯一可以做的就是用户填完第五个cell,就要选其他的cell(目的就是要让第五个cell updated)。但是用户一定会吵的。
怎样才能使最后一个cell updated呢?
回复

使用道具 举报


ADVERTISEMENT

发表于 2-3-2009 09:49 PM | 显示全部楼层
原帖由 Sui_G_G 于 2-3-2009 07:39 PM 发表
我要create一个table然后让用户填资料,当用户填完了就按update button以便把资料写进txt file。问题是我发现当用户填了第一个cell然后去另一个cell,第一个cell才会被update进tablemodel的。如此一来,如果有五个ce ...



post 你的code出来
回复

使用道具 举报

 楼主| 发表于 3-3-2009 12:10 AM | 显示全部楼层

回复 2# winmxaa 的帖子

300多行 ...不懂应该post那一部分。
回复

使用道具 举报

 楼主| 发表于 3-3-2009 12:18 AM | 显示全部楼层
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class Main extends JFrame implements ActionListener, TableModelListener{
  DefaultTableModel model = new DefaultTableModel(new Object[][] {
      { "some", "text" }, { "any", "text" }, { "even", "more" },
      { "text", "strings" }, { "and", "other" }, { "text", "values" } },
      new Object[] { "Column 1", "Column 2" });

  public Main() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JTable table = new JTable(model);
    getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
    pack();

public void tableChanged(javax.swing.event.TableModelEvent source)     {
    String msg="";
    TableModel tabMod = (TableModel)source.getSource();
    switch (source.getType())
    {
       case TableModelEvent.UPDATE:
       msg="Cannot leave blank";
           JOptionPane.showMessageDialog(null,msg,"Table Example",JOptionPane.INFORMATION_MESSAGE);
           break;
    }                  
   }
public void actionPerformed(ActionEvent source)
    {
       if (source.getSource()==(JButton) cmdGenerate)
         {
               //update the date in table
         }
    }
}//Table Change
  }

  public static void main(String arg[]) {
    new Main().setVisible(true);
  }
}

大概就是这样。缩写版本,所以syntax可能有错

[ 本帖最后由 Sui_G_G 于 3-3-2009 12:19 AM 编辑 ]
回复

使用道具 举报

发表于 3-3-2009 12:35 AM | 显示全部楼层
focus lost 如何?
回复

使用道具 举报

 楼主| 发表于 3-3-2009 02:02 AM | 显示全部楼层

回复 5# vxion 的帖子

focus lost怎么做的?
回复

使用道具 举报

Follow Us
发表于 3-3-2009 10:09 AM | 显示全部楼层
抓celleditor的focuslost,然后stopCellEditing()。

突然想到,只用stopCellEditing(),应该可以解决你的问题,跟focuslost没什么关系。
回复

使用道具 举报

发表于 3-3-2009 09:31 PM | 显示全部楼层
原帖由 vxion 于 3-3-2009 10:09 AM 发表
抓celleditor的focuslost,然后stopCellEditing()。

突然想到,只用stopCellEditing(),应该可以解决你的问题,跟focuslost没什么关系。


是咯,
public void actionPerformed(ActionEvent source) {
        if (source.getSource() == (jButton)) {
            // update the date in table
            if (table.getCellEditor() != null) {
                table.getCellEditor().stopCellEditing();
            }
        }
        System.out.println(model.getDataVector());
    }

declare 你的JTable 在外面

[ 本帖最后由 winmxaa 于 3-3-2009 09:38 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 5-3-2009 12:48 PM | 显示全部楼层

回复 8# winmxaa 的帖子

谢谢!!试了再让你们知道!
回复

使用道具 举报

 楼主| 发表于 5-3-2009 06:30 PM | 显示全部楼层
winmxaa,你的方法可以用!!谢了!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 18-12-2025 04:59 AM , Processed in 0.134104 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表