1

こんにちは、テキスト ファイルを に読み込んでJTableいますが、私の JTable は次のようになります。 ここに画像の説明を入力

JTable正しくフォーマットして、ユーザーが編集できるようにするにはどうすればよいですか?

マイ テキスト ファイル: ファイル名(people.txt)

COLUMN_NAME COLUMN_TYPE IS_NULLABLE COLUMN_KEY  COLUMN_DEFAULT  EXTRA   
Names   VARCHAR(500)    NO  
Address VARCHAR(500)    NO

これまでのコーディング:

 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);
         }
      }

どうもありがとうございます。

4

3 に答える 3

0

DefaultTableModelテーブル内のデータを表すためにを使用しないのはなぜですか? Swing に関連するすべてのことを処理し、addColumn(Object)addRow(Object[])をそれぞれ使用して、列または行を簡単に追加できます。

まず、DefaultTableModelオブジェクトを作成します。

次に、 を作成する代わりに、次のようにして をVector columns埋めます。model

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

また

Vector row = new Vector();
StringTokenizer st2 = new StringTokenizer(line, " ");
while (st2.hasMoreTokens()) {
    row.add(st2.nextToken());
}
result.addRow(row); // for adding a row
于 2013-04-17T06:19:29.957 に答える
0

これを試してください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);
于 2013-04-17T06:28:19.700 に答える