Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否按文本文件所示格式化JTable?_Java_Swing_Text_Jtable - Fatal编程技术网

Java 是否按文本文件所示格式化JTable?

Java 是否按文本文件所示格式化JTable?,java,swing,text,jtable,Java,Swing,Text,Jtable,您好,我正在将一个文本文件读入JTable,但现在我的JTable是这样的: 如何正确设置格式并允许用户编辑JTable 我的文本文件:文件名(people.txt) 迄今为止的编码: import java.io.*; import java.awt.*; import java.util.*; import javax.swing.*; import java.awt.event.*; import javax.swing.table.*; public class s

您好,我正在将一个文本文件读入
JTable
,但现在我的JTable是这样的:

如何正确设置格式并允许用户编辑
JTable

我的文本文件:文件名(people.txt)

迄今为止的编码:

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

   public class stackq extends AbstractTableModel {
    Vector data;
    Vector columns;

    public stackq() {
            String line;
            data = new Vector();
            columns = new Vector();
            try {
                    FileInputStream fis = new FileInputStream("D:/joy/text/people.txt");
                    BufferedReader br = new BufferedReader(new InputStreamReader(fis));
                    StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");
                    while (st1.hasMoreTokens())
                            columns.addElement(st1.nextToken());
                    while ((line = br.readLine()) != null) {
                            StringTokenizer st2 = new StringTokenizer(line, " ");
                            while (st2.hasMoreTokens())
                                    data.addElement(st2.nextToken());
                    }
                    br.close();
            } catch (Exception e) {
                    e.printStackTrace();
            }
    }

    public int getRowCount() {
            return data.size() / getColumnCount();
    }

    public int getColumnCount() {
            return columns.size();
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
            return (String) data.elementAt((rowIndex * getColumnCount())
                            + columnIndex);
    }

     public String getColumnName(int i){
         return (String)columns.get(i);
              }


      public static void main(String s[]) {
            stackq model = new stackq();
            JTable table = new JTable();
            table.setModel(model);
           JScrollPane scrollpane = new JScrollPane(table);
            JPanel panel = new JPanel();
            panel.add(scrollpane);
            JFrame frame = new JFrame();
            frame.add(panel, "Center");
            frame.pack();
            frame.setVisible(true);
         }
      }
非常感谢。

为什么不使用来表示表中的数据?它将为您处理所有与Swing相关的内容,您可以分别使用
addColumn(Object)
addRow(Object[])
轻松地向其中添加列或行

首先,您将创建一个
DefaultTableModel
对象

然后,不必创建
向量列
,只需通过以下操作填充
模型

model.addColumn(st1.nextToken()); // (for adding a column)

为什么不使用来表示表中的数据?它将为您处理所有与Swing相关的内容,您可以分别使用
addColumn(Object)
addRow(Object[])
轻松地向其中添加列或行

首先,您将创建一个
DefaultTableModel
对象

然后,不必创建
向量列
,只需通过以下操作填充
模型

model.addColumn(st1.nextToken()); // (for adding a column)

publicstackq(){
弦线;
数据=新向量();
列=新向量();
整数计数=0;
试一试{
FileInputStream fis=新的FileInputStream(“D:\\1.txt”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(fis));
StringTokenizer st1=新的StringTokenizer(br.readLine(),“”);
while(st1.hasMoreTokens()){
columns.addElement(st1.nextToken());
计数++;
}
而((line=br.readLine())!=null){
StringTokenizer st2=新的StringTokenizer(行“”);
for(int i=0;i
只需为header count添加一个count变量,并将空字符串添加到标记器返回null的数据向量中。

public Stackq(){
弦线;
数据=新向量();
列=新向量();
整数计数=0;
试一试{
FileInputStream fis=新的FileInputStream(“D:\\1.txt”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(fis));
StringTokenizer st1=新的StringTokenizer(br.readLine(),“”);
while(st1.hasMoreTokens()){
columns.addElement(st1.nextToken());
计数++;
}
而((line=br.readLine())!=null){
StringTokenizer st2=新的StringTokenizer(行“”);
for(int i=0;i

只需为header count添加一个count变量,并将空字符串添加到标记器返回null的数据向量中。

如果您使用的是NetBean,则可以尝试此操作,在NetBean中可以将对象列表绑定到表,并使用相应的值绑定列empMList是员工列表

org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, empMList, jTable1);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${address}"));
        columnBinding.setColumnName("Address");
        columnBinding.setColumnClass(String.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${name}"));
        columnBinding.setColumnName("Employee Name");
        columnBinding.setColumnClass(String.class);
        columnBinding.setEditable(false);
        bindingGroup.addBinding(jTableBinding);

如果您使用的是NetBean,您可以将对象列表绑定到表,并使用相应的值绑定列empMList是员工列表

org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, empMList, jTable1);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${address}"));
        columnBinding.setColumnName("Address");
        columnBinding.setColumnClass(String.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${name}"));
        columnBinding.setColumnName("Employee Name");
        columnBinding.setColumnClass(String.class);
        columnBinding.setEditable(false);
        bindingGroup.addBinding(jTableBinding);


你能举个例子吗?我对Java不熟悉你能举个例子吗?我对Java不熟悉有趣的是,当我将文本内容作为字符串复制/粘贴到源代码中并运行它时,我得到的结果与上面看到的完全不同——有不同的列。原始文件中的值是否由空格、制表符或其他字符分隔?列\名称列\类型为\可空列\键列\默认额外名称VARCHAR(500)无地址VARCHAR(500)NOhi andrew,立即将上述内容复制到源文本并运行,这将起作用now@your照片看起来很奇怪,就像@Andrew说的。如果您希望表格是可编辑的,您可以使用
table.setCellEditable(true)
并向表格注册一个
table Cell侦听器
,停止编辑后,您可以调用
setValueAt()
为表格模型设置新值,您可以通过谷歌搜索它。@tim您不认为接下来应该使用
新的StringTokenizer(第行),“\t”)
?您将空白指定为列的分隔符,而实际上它是制表符,因此标记器将返回整行作为单个标记。有趣的是,当我将该文本内容作为字符串复制/粘贴到源代码并运行它时,我得到的结果与上面看到的完全不同-具有不同的列。这些值是原始文件由空格、制表符或其他字符分隔?列\u名称列\u类型为\u可空列\u键列\u默认额外名称VARCHAR(500)无地址VARCHAR(500)NOhi andrew,现在将上面的内容复制到源文本并运行,这将起作用now@your图片看起来很奇怪,就像@Andrew说的。如果你想让表格可编辑,你可以使用
table.setCellEditable(true)
并向表格注册一个
table Cell监听器
,停止编辑后,你可以调用
setValueAt()
要将新值设置为table model,您可以通过谷歌搜索。@tim您不认为接下来应该使用
新的StringTokenizer(第“\t”行)
?您将空白指定为列的分隔符,而实际上它是制表符,因此标记器将返回整行作为单个标记。您好,我确实运行了您的代码,但它仍然显示相同的内容:您好,很高兴看到,我已进行了编辑,查看了我的整个代码:,它仍然不显示像您不,它不工作g、 您是否检查了我的代码?您的代码与我的代码匹配吗?请帮助我在我的机器上运行您的代码,它完全正常工作。您好,这是必需的,新的StringTokenizer(第“\t”行),很好,现在我所有的数据都被分离了,你知道我如何在表中编辑我的单元格并更新它吗?我确实运行了你的代码,但它仍然显示相同的内容:嗨,这对se来说太好了
org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, empMList, jTable1);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${address}"));
        columnBinding.setColumnName("Address");
        columnBinding.setColumnClass(String.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${name}"));
        columnBinding.setColumnName("Employee Name");
        columnBinding.setColumnClass(String.class);
        columnBinding.setEditable(false);
        bindingGroup.addBinding(jTableBinding);