【发布时间】: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() 方法才能在这里做任何事情......
【问题讨论】:
-
"文件所有数据都是String格式,应该有布尔值。"见
Boolean.valueOf(String).. -
我编辑了帖子。这是我的代码。
-
您希望我们如何在没有..
new File("C:\\Users\\Mateusz\\Desktop\\test.txt");的情况下运行代码?这就是为什么我建议您硬编码一些数据来替换文件!哦,还有private AddFrame dialog;..
标签: java swing checkbox jtable text-files