刷新Jtable中的按钮

鲁迪(Rudy)开发

我正在做一个ui,我将文本文件中的数据读取到JTable中,用户可以在JTable中进行编辑,然后将数据保存到另一个文本文件中。我想要一个刷新按钮,以便如果用户在JTable中进行编辑并且不希望更改到完成后,可以单击刷新按钮,数据将是从文本文件读取的先前数据。

这是代码:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class Bb extends JFrame
{
 private JTable table;
 private DefaultTableModel model;

 @SuppressWarnings("unchecked")
 public Bb()
 {

      String aLine ;
      Vector columnNames = new Vector();
      Vector data = new Vector();

      try
      {
           FileInputStream fin = new FileInputStream("test1.txt");
           BufferedReader br = new BufferedReader(new InputStreamReader(fin));


           StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");

           while( st1.hasMoreTokens() )
           {
                columnNames.addElement(st1.nextToken());
           }


           while ((aLine = br.readLine()) != null)
           {
                StringTokenizer st2 = new StringTokenizer(aLine, " ");
                Vector row = new Vector();

                while(st2.hasMoreTokens())
                {
                     row.addElement(st2.nextToken());
                }
                data.addElement( row );
           }
           br.close();
      }
      catch (Exception e)
      {
           e.printStackTrace();
      }

      final JTable table = new JTable(new DefaultTableModel(data, columnNames){
      private static final long serialVersionUID = 1L;

  @Override
  public Class getColumnClass(int column) {
       return Integer.class;
       }
  });


  JScrollPane scrollPane = new JScrollPane( table );
      getContentPane().add( scrollPane );


      JPanel buttonPanel = new JPanel();
      getContentPane().add( buttonPanel, BorderLayout.SOUTH );


      JButton button1 = new JButton( "Save" );
      buttonPanel.add( button1 );
      button1.addActionListener( new ActionListener()
      {
           public void actionPerformed(ActionEvent e)
           {
               if  ( table.isEditing() )
                {
                     int row = table.getEditingRow();
                     int col = table.getEditingColumn();
                     table.getCellEditor(row, col).stopCellEditing();
                }

                int rows = table.getRowCount();
                int columns = table.getColumnCount();



     try { 
       StringBuilder con = new StringBuilder();
       for (int i = 0; i < rows; i++)
        {
          for (int j = 0; j < columns; j++)
           {
              Object Value = table.getValueAt (i, j);
              con.append(" ");
              con.append(Value);
           }
          con.append("\r\n");
        }

    FileWriter fileWriter = new FileWriter(new File("new.txt"));

    fileWriter.write(con.toString());
    fileWriter.flush();

   }  catch (Exception ex) {  
            ex.printStackTrace();  
        }  
    }
  });

      JButton button3 = new JButton( "Refresh" );
      buttonPanel.add( button3 );
      button3.addActionListener( new ActionListener()
      {
           public void actionPerformed(ActionEvent e)
           {

           }
      });
  }

 public static void main(String[] args)
 {
      Bb Re = new Bb();
      Re.setDefaultCloseOperation( EXIT_ON_CLOSE );
      Re.pack();
      Re.setVisible(true);
 }
}

文本文件:

a b c d e f e
78 12 12 45 45 45 78
45 45 69 56 78 56 23
45 89 76 42 15 36 23
提图斯

试试这个:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;

import javax.swing.*;
import javax.swing.table.*;

public class Bb extends JFrame {
private JTable table;
private DefaultTableModel model;
Vector columnNames = new Vector();
Vector data = new Vector();

@SuppressWarnings("unchecked")
public Bb() {

    String aLine;

    try {
        FileInputStream fin = new FileInputStream("test1.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(fin));

        StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");

        while (st1.hasMoreTokens()) {
            columnNames.addElement(st1.nextToken());
        }

        while ((aLine = br.readLine()) != null) {
            StringTokenizer st2 = new StringTokenizer(aLine, " ");
            Vector row = new Vector();
            while (st2.hasMoreTokens()) {
                row.addElement(st2.nextToken());
            }
            data.addElement(row);
        }
        br.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

    table = new JTable(new DefaultTableModel(getDefaultData(), columnNames) {
        private static final long serialVersionUID = 1L;

        @Override
        public Class getColumnClass(int column) {
            return Integer.class;
        }
    });

    JScrollPane scrollPane = new JScrollPane(table);
    getContentPane().add(scrollPane);

    JPanel buttonPanel = new JPanel();
    getContentPane().add(buttonPanel, BorderLayout.SOUTH);

    JButton button1 = new JButton("Save");
    buttonPanel.add(button1);
    button1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (table.isEditing()) {
                int row = table.getEditingRow();
                int col = table.getEditingColumn();
                table.getCellEditor(row, col).stopCellEditing();
            }

            int rows = table.getRowCount();
            int columns = table.getColumnCount();

            try {
                StringBuilder con = new StringBuilder();
                for (int i = 0; i < rows; i++) {
                    for (int j = 0; j < columns; j++) {
                        Object Value = table.getValueAt(i, j);
                        con.append(" ");
                        con.append(Value);
                    }
                    con.append("\r\n");
                }

                FileWriter fileWriter = new FileWriter(new File("new.txt"));

                fileWriter.write(con.toString());
                fileWriter.flush();

            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    });

    JButton button3 = new JButton("Refresh");
    buttonPanel.add(button3);
    button3.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            refresh();
        }
    });
}

public static void main(String[] args) {
    Bb Re = new Bb();
    Re.setDefaultCloseOperation(EXIT_ON_CLOSE);
    Re.pack();
    Re.setVisible(true);
}

private void refresh() {

    DefaultTableModel dtm = new DefaultTableModel(getDefaultData(),
            columnNames) {
        private static final long serialVersionUID = 1L;

        @Override
        public Class getColumnClass(int column) {
            return Integer.class;
        }
    };
    table.setModel(dtm);
    table.revalidate();
}

private Vector getDefaultData() {
    Vector defData = new Vector();
    for (int i = 0; i < data.size(); i++) {
        Vector tmp = (Vector) data.get(i);
        Vector nVc = new Vector();
        for (int j = 0; j < tmp.size(); j++) {
            nVc.addElement(tmp.get(j));
        }
        defData.add(nVc);
    }
    return defData;
}

}

这将起作用,但不是一个好习惯,您应该在EDT上运行处理接口的代码,并在另一个线程上运行处理其他部分(文件读取,向量创建)的代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

刷新按钮不刷新jtable

来自分类Dev

在Swing中刷新JTable数据

来自分类Dev

在Swing中刷新JTable数据

来自分类Dev

刷新JTable中的所有数据

来自分类Dev

表刷新中的jtable单列/字段

来自分类Dev

Android中刷新按钮的动画

来自分类Dev

gtkdialog中的刷新(填充)按钮

来自分类Dev

Android中刷新按钮的动画

来自分类Dev

使用Excel文件中的数据刷新表JTable

来自分类Dev

使用JRadioButtons更改JTable中的列不会刷新结构

来自分类Dev

使用JRadioButtons更改JTable中的列不会刷新结构

来自分类Dev

从数据库中删除项目后刷新jtable

来自分类Dev

如何在Flask中创建刷新按钮?

来自分类Dev

UI中的单选按钮选择未刷新

来自分类Dev

如何刷新JFrame中包含的按钮的颜色?

来自分类Dev

是否可以禁用PHP中的刷新按钮?

来自分类Dev

updatepanel中的按钮导致整个页面刷新

来自分类Dev

UI中的单选按钮选择未刷新

来自分类Dev

刷新Gtk GUI中的按钮框

来自分类Dev

快速显示按钮以刷新Twitter中的表格

来自分类Dev

使用新命令刷新 Tkinter 中的按钮

来自分类Dev

刷新JTable删除标题

来自分类Dev

JTable将不会刷新

来自分类Dev

我的Jtable不刷新

来自分类Dev

刷新包含JPanel的JTable

来自分类Dev

Java GUI JTable“刷新”

来自分类Dev

JTable单元格中的按钮不可单击

来自分类Dev

如何在JTable的行中添加按钮?

来自分类Dev

未在 jtable 中的 coloum 内显示单选按钮组