Как сохранить столбцы модели свойств JTable, которые уже установлены при использовании AbstractTableModel - PullRequest
0 голосов
/ 04 мая 2019

Я загружаю свои данные из текстового файла в JTable, и внутри текстового файла нет названия столбцов. Потому что я задаю имя столбца JTable в свойствах. Я использую extends AbstractTableModel для достижения этой цели.

Я следую некоторому замечательному учебнику https://www.rgagnon.com/javadetails/java-0213.html. Но мне не нужно имя столбца, потому что я уже установил его в свойствах JTable.

package leaveappsysgui;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;


public class EmpDataTabelModel extends AbstractTableModel{
    private FileInputStream fis;
    private BufferedReader br;
    private StringTokenizer st1, st2;
    protected Vector data;
    protected Vector columnNames ; 
    protected String datafile, line;

    public EmpDataTabelModel(String f) {
        this.datafile = f;
        initVectors();
    }

    public void initVectors(){
        data = new Vector();
        columnNames = new Vector();

        try{
            fis = new FileInputStream(datafile);
            br = new BufferedReader(new InputStreamReader(fis));

            // extract column names
            st1 = new StringTokenizer(br.readLine(), ",");
                while(st1.hasMoreTokens())
                    columnNames.addElement(st1.nextToken());

            //extractd data
            while((line = br.readLine()) != null){
                st2 = new StringTokenizer(line, ",");
                while(st2.hasMoreTokens()){
                    data.addElement(st2.nextToken());
                }
            }
            br.close();
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("Error here");
        }
    }

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

    @Override
    public int getColumnCount() {
        return columnNames.size();
    }

    @Override
    public String getColumnName(int columnIndex) {
        String colName = "";
        if (columnIndex <= getColumnCount()){
            colName = (String)columnNames.elementAt(columnIndex);
        }
        return colName;
    }

    @Override
    public Class getColumnClass(int columnIndex) {
        return String.class;
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false; 
    }

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

Я пытаюсь удалить переопределенные столбцы, но получаю ошибку. Как расширить AbstractTableModel без переопределения столбцов. Я надеюсь, что вы все понимаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...