java - Jtable 不返回最后一个单元格值

标签 java swing jtable actionlistener

这是我的表类

package build;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class Table
{
private ArrayList<Column> columns;
private String NAME;
private static int count=0;
public Table() 
{
    setColumns(new ArrayList<Column>());
    NAME=new String();

    this.NAME="Table"+count;
    count++;
}

public void AddColumn(Column column)
{
    for(Column c: getColumns())
    {
       if(c.getname().equals(column.getname())){return;}
    }

    getColumns().add(column);

}
public int getCount(){return count;}
public void SaveToFile() throws IOException
{


    FileWriter fw = new FileWriter("C:/Users/Ashad/Desktop/text.txt", true);
    BufferedWriter bw = new BufferedWriter(fw);
     bw.write("\r\n");
    bw.write(this.NAME);
     bw.write("\r\n");

 for(Column c: getColumns())
 {
 bw.write("\r\n");
        bw.write(c.getname()+"  ");

        bw.write(c.getdatatype()+"  ");


 if(c.getPK()== true)
 {
        bw.write("true"+"  ");

 }    
    else
    {   bw.write("false"+"  ");

    }
if(c.getNN()== true)
{
    bw.write("true"+"   ");

}     
else
    {bw.write("false"+"  "); } 



 }
 bw.close();
}

  public boolean DeleteColumn(String name)
  {
    for (Column c : getColumns())
    {
        if (c.getname().equals(name)) {return getColumns().remove(c);}
    }
    return false;
  }

 public void viewColumns()
 {
      System.out.append(NAME+"  ");

    for(Column c: getColumns())
    {
      System.out.append("\n");
      System.out.append(c.getname()+"  ");

      System.out.append( c.getdatatype()+"  ");

      if(c.getPK()== true)
      {
         System.out.print(true);
      }   
          else
        System.out.print(false);  
      }
     }

public String getNAME() {

    return NAME;
}

public ArrayList<Column> getColumns() {
    return columns;
}

public void setColumns(ArrayList<Column> columns) {
    this.columns = columns;
}



  }

JTable

 table.setModel(new DefaultTableModel(

                  new Object[][] {
                  {null, null, null, null},
                  {null, null, null, null},
                  {null, null, null, null},
                  {null, null, null, null},
                  {null, null, null, null},
                  {null, null, null, null},
                  {null, null, null, null},
                  {null, null, null, null},
                  {null, null, null, null},
                  {null, null, null, null},

                  {null, null, null, null},
                  {null, null, null, null},
                  {null, null, null, null},
                  {null, null, null, null},
                  },
        new String[] {
            "Column Name", "Data Type", "NN", "PK"
                        }
              ) {
                    Class[] columnTypes = new Class[] {
                String.class, Object.class, Boolean.class, Boolean.class
            };
        public Class getColumnClass(int columnIndex) {
                return columnTypes[columnIndex];
        }

下面的按钮将插入 Jtable 的值保存到表的对象中。

 btnNewButton.addActionListener(new ActionListener() 
   {
    @Override
    public void actionPerformed(ActionEvent e) {

      // getTable Values 
       for (int r = 0; r < model.getRowCount(); r++)
        {
           if((String)model.getValueAt(r, 0) != null)
         {

                    Column col=new Column();

            col.setname((String) model.getValueAt(r, 0)) ;
            col.setdatatype((String) model.getValueAt(r, 1));


             /*  if((Boolean)model.getValueAt(r, 2)== true)
                       {
                col.setPK(true); 
               }


             if((Boolean)model.getValueAt(r, 3)== true)
               {
                    col.setNN(true); 
                    }
               */

                    T.AddColumn(col);

             }
                else 
                       break;
            }
           try {
            T.SaveToFile();
            } catch (IOException e1) {

            e1.printStackTrace();
                    }
            T.viewColumns();
           frame.setVisible(false); 
                        }
                    });

问题:: * 它不会保存最后一个值,例如,如果最后插入的值位于 model.getValueAt(1, 1) 或其位于 model.getValueAt(2, 1)

如果 Jtable 上的输入是 Type1 int
Type2 字符

上面代码给出的输出::Type1 int
类型2

  • 第二个问题是取消注释

    if((Boolean)model.getValueAt(r, 2)== true) { col.setPK(true); } 和

    if((Boolean)model.getValueAt(r, 3)== true) { col.setPK(true); }

由于返回类型为 boolean 值,因此出现错误。

最佳答案

Its not saving the last value

也许Table Stop Editing会有所帮助。

关于java - Jtable 不返回最后一个单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267980/

相关文章:

java - 我是否必须在与 Java 中声明变量相同的范围内初始化变量?

java - 缓慢改变颜色,Java 图形

java - 将数组从 SwingWorker 线程返回到主线程

java - 解析日期字符串时抛出多个异常

java - 确保运行时 Java 父类(super class)是正确的

java - 如何使用 @BeforeSuite 注释通过 Selenium + TestNG 运行多个浏览器 session (并行执行)

java - 如何使用 GridLayout 使 JScrollPane 上的 JPanel 仅填充宽度而不填充高度?

java - 自定义链表存在问题并应用于 JTable

java JTable,defaultTableModel想要addRow

java - 如何使 JTable 的宽度 >= 封闭滚动 Pane 的宽度?