【问题标题】:How to make JCheckBox from text file data如何从文本文件数据制作 JCheckBox
【发布时间】:2015-04-23 00:27:49
【问题描述】:

我有一个显示文件数据的 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 文件中。我知道如何阅读它以显示表格中的所有内容,但我不知道如何设置复选框以显示值(真、假)。 我的文件如下所示:

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() 方法才能在这里做任何事情......

【问题讨论】:

  • 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。硬编码一些数据来替换文件。
  • "文件所有数据都是String格式,应该有布尔值。"Boolean.valueOf(String)..
  • 我编辑了帖子。这是我的代码。
  • 您希望我们如何在没有..new File("C:\\Users\\Mateusz\\Desktop\\test.txt"); 的情况下运行代码?这就是为什么我建议您硬编码一些数据来替换文件!哦,还有private AddFrame dialog;..

标签: java swing checkbox jtable text-files


【解决方案1】:

简单地将“true”或“false”添加到文件中(不带引号)。

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

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

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

【讨论】:

    【解决方案2】:

    字符串到布尔转换器:
    假设字符串“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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多