我有一个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()方法来做任何事情......
答案 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.parseBoolean
将String
转换为boolean
值
您可以在加载数据时或为列
调用getValueAt
时执行此操作
另一种选择是应用自定义单元格渲染。使用此渲染器,您可以将单元格中具有的值转换为布尔值并更新单元格渲染的状态(应基于JCheckBox
),但您必须执行此操作细胞编辑器也是一样......