如何从文本文件数据制作JCheckBox

时间:2015-02-21 09:05:42

标签: java swing checkbox jtable text-files

我有一个JTable,它显示文件中的数据。我希望在这个JTable中有一列复选框。我知道我必须覆盖getColumnClass方法以返回Boolean.class。我是这样做的:

    private DefaultTableModel tableModel = tableModel = new DefaultTableModel(0, col.length){
    public Class<?> getColumnClass(int colIndex) {
        if (colIndex == 6)
                return java.lang.Boolean.class;
        else
        return java.lang.Object.class;
    }
};

正如我所说,JTable的数据存储在txt文件中。我知道如何阅读它来显示表格中的所有内容,但我不知道如何设置复选框来显示值(true,false)。 我的文件看起来像这样:

aaaaaaaaaa|cw27729|604208652|16/02/2015|description|cost|Here i want data for checkboxes|
sdfsdf|sdfdsf|sdfsf|16/02/2015|description|cost|Here i want data for checkboxes|

因此,如果文件表的最后一列中没有文本显示空复选框,那很好。但是,如果我想要复选框,我的文件应该是什么样子?我尝试过Boolean.TRUE,true或者不同的奇怪的东西,我总是遇到很多错误。

我认为,当我读取文件时,所有数据都是字符串格式,并且列中应该有Boolean.Class,它应该显示复选框。

任何人都可以帮助我吗? 对不起,如果我的英语不好,那就不是我的母语了。

编辑:这是班级的代码(对不起,如果它很乱)(我在这里添加它因为我不知道我怎么能以其他方式做到这一点)

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.Scanner;

public class StartFrameV2 extends JFrame {
public StartFrameV2() {
    setTitle("Dane pojazdów/części");
    setSize(WIDTH, HEIGHT);


    JPanel southPanel = new JPanel();
    final JButton button = new JButton("Zamknij");
    southPanel.add(button);
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    });

    add(southPanel, BorderLayout.SOUTH);

    JPanel northPanel = new JPanel();
    northPanel.setLayout(new GridLayout(1, 3));

    final JButton addButton = new JButton("Dodaj element");
    northPanel.add(addButton);
    addButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (dialog == null)
                dialog = new AddFrame(StartFrameV2.this);
            dialog.setVisible(true);

        }
    });

    final JButton searchButton = new JButton("Szukaj");
    northPanel.add(searchButton);

    add(northPanel, BorderLayout.NORTH);

    JTable contentTable = new JTable();

    tableModel.setColumnIdentifiers(col);
    contentTable.setModel(tableModel);
    contentTable.getColumn("Marka").setPreferredWidth(100);
    contentTable.getColumn("Numer telefonu").setPreferredWidth(100);
    contentTable.getColumn("Numer rejestracyjny").setPreferredWidth(100);
    contentTable.getColumn("Data przyjęcia").setPreferredWidth(70);
    contentTable.getColumn("Opis").setPreferredWidth(300);
    contentTable.getColumn("F/P").setPreferredWidth(50);
    contentTable.getColumn("Koszt").setPreferredWidth(70);
    readFile(tableModel);
    JScrollPane scrollPane = new JScrollPane(contentTable);
    add(scrollPane);

}

public void readFile(DefaultTableModel tableModel){
    String line;
    BufferedReader reader;
    try {
        reader = new BufferedReader(new FileReader(file));
        while ((line = reader.readLine()) != null) {
            tableModel.addRow(line.split("\\|"));
        }
        reader.close();
    }catch (IOException e) {
        e.printStackTrace();
    }
}

public int lineCounter() {                          // How many lines there is in a file
    int linenumber = 0;
    try{
        FileReader fr = new FileReader(file);
        LineNumberReader lnr = new LineNumberReader(fr);

        while(lnr.readLine() != null){
            linenumber++;
        }
        System.out.println(linenumber);
    }catch(IOException e){
        e.printStackTrace();
    }
    return linenumber;
}


private Object[] col = {"Marka", "Numer rejestracyjny", "Numer telefonu", "Data przyjęcia", "Opis", "F/P", "Koszt"};
private DefaultTableModel tableModel = tableModel = new DefaultTableModel(0, col.length){
    public Class<?> getColumnClass(int colIndex) {
        if (colIndex == 6)
                return java.lang.Boolean.class;
        else
        return java.lang.Object.class;
    }
};

    private final static File file = new File("C:\\Users\\Mateusz\\Desktop\\test.txt");

    private int WIDTH = 800;
    private int HEIGHT = 300;
    private AddFrame dialog;

}

我想我必须改变readFile()方法来做任何事情......

2 个答案:

答案 0 :(得分:0)

字符串到布尔转换器:
假设字符串“42”表示true,则任何其他表示false:

private static boolean s2b(String test) {
    return test.equals("42");
}

public static void main(String[] args) {
    System.out.println(s2b("42")); //true
    System.out.println(s2b("88")); //false
}

答案 1 :(得分:0)

简单添加&#34; true&#34;或&#34;假&#34;进入文件(没有引号)。

然后,您可以使用Boolean.parseBooleanString转换为boolean

您可以在加载数据时或为列

调用getValueAt时执行此操作

另一种选择是应用自定义单元格渲染。使用此渲染器,您可以将单元格中具有的值转换为布尔值并更新单元格渲染的状态(应基于JCheckBox),但您必须执行此操作细胞编辑器也是一样......