Java 如何从文本文件数据生成JCheckBox

Java 如何从文本文件数据生成JCheckBox,java,swing,checkbox,jtable,text-files,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) { i

我有一个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;
    }
};
所以,若文件表的最后一列中并没有文本,那个么它将显示空复选框,这很好。但如果我想选中复选框,我的文件应该是什么样子?我尝试了布尔值。真的,真的,或不同的东西,我总是得到很多错误

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

谁能帮帮我吗? 对不起,如果我的英语不好,那不是我的母语

编辑:这是这个类的代码(很抱歉,如果它很凌乱)(我在这里添加它,因为我不知道如何用其他方式来做)

import javax.swing.*;
导入javax.swing.table.DefaultTableModel;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.io.*;
导入java.util.Scanner;
公共类StartFrameV2扩展了JFrame{
公共启动框架v2(){
片名(“Dane pojazdów/części”);
设置尺寸(宽度、高度);
JPanel southPanel=新的JPanel();
最终JButton按钮=新JButton(“Zamknij”);
添加(按钮);
addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
系统出口(0);
}
});
添加(southPanel,BorderLayout.SOUTH);
JPanel northPanel=新的JPanel();
设置布局(新的网格布局(1,3));
最终JButton addButton=新JButton(“Dodaj元素”);
添加(添加按钮);
addButton.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
如果(对话框==null)
dialog=newaddframe(StartFrameV2.this);
对话框.setVisible(true);
}
});
最终JButton searchButton=新JButton(“Szukaj”);
添加(搜索按钮);
添加(northPanel,BorderLayout.NORTH);
JTable contentTable=新的JTable();
tableModel.setColumnIdentifiers(col);
setModel(tableModel);
contentTable.getColumn(“Marka”).setPreferredWidth(100);
contentTable.getColumn(“Numer telefonu”).setPreferredWidth(100);
contentTable.getColumn(“Numer rejestracyjny”).setPreferredWidth(100);
contentTable.getColumn(“数据przyjęcia”).setPreferredWidth(70);
contentTable.getColumn(“Opis”).setPreferredWidth(300);
contentTable.getColumn(“F/P”).setPreferredWidth(50);
contentTable.getColumn(“Koszt”).setPreferredWidth(70);
readFile(tableModel);
JScrollPane scrollPane=新的JScrollPane(contentTable);
添加(滚动窗格);
}
公共无效读取文件(DefaultTableModel tableModel){
弦线;
缓冲读取器;
试一试{
reader=newbufferedreader(newfilereader(file));
而((line=reader.readLine())!=null){
tableModel.addRow(line.split(“\\\\”);
}
reader.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
public int lineCounter(){//文件中有多少行
int linenumber=0;
试一试{
FileReader fr=新的FileReader(文件);
LineNumberReader lnr=新的LineNumberReader(fr);
while(lnr.readLine()!=null){
linenumber++;
}
系统输出打印项次(行号);
}捕获(IOE异常){
e、 printStackTrace();
}
返回行号;
}
私有对象[]列={“Marka”、“Numer rejestracyjny”、“Numer telefonu”、“Data przyjęcia”、“Opis”、“F/P”、“Koszt”};
私有DefaultTableModel tableModel=tableModel=new DefaultTableModel(0,列长度){
公共类getColumnClass(int-colIndex){
如果(系数=6)
返回java.lang.Boolean.class;
其他的
返回java.lang.Object.class;
}
};
私有最终静态文件=新文件(“C:\\Users\\Mateusz\\Desktop\\test.txt”);
私有整数宽度=800;
私人内部高度=300;
私有AddFrame对话框;
}

我想我必须更改readFile()方法才能在这里执行任何操作…

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

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
}
简单地将“true”或“false”添加到文件中(不带引号)

然后可以使用
Boolean.parseBoolean
字符串
转换为
Boolean

您可以在加载数据时或为列调用
getValueAt
时执行此操作


另一个选项是应用自定义单元渲染。使用此渲染器,您可以将单元格中的任何值转换为布尔值,并更新单元格渲染的状态(应基于
JCheckBox
),但您必须对单元格编辑器执行相同的操作…

要更快地获得更好的帮助,请发布(最简单的完整可验证示例)或(简短、自包含、正确的示例)。硬编码一些数据以替换文件。“文件所有数据都是字符串格式,应该有布尔值。”请参阅..我编辑了文章。这是我的代码。如果没有..
新文件(“C:\\Users\\Mateusz\\Desktop\\test.txt”),您希望我们如何运行代码;
?这就是为什么我建议您硬编码一些数据来替换文件!哦,还有一个
private AddFrame对话框;
。。
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;

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