- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请帮助我,如果我想添加新行、编辑行以及从表中删除行,我该怎么办?我试图做某事,但没有成功。 (该表打开 csv 文件,其中各列由 ;
分隔,例如一行如下所示:
Mike;Tyson;50;mike@tyson.com;123123123
这是我的代码:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
public class T1Data extends JPanel {
private final JTable table;
private MyModel model;
private JPanel buttonsPanel;
static File currentFile; //remember edited file
public T1Data() {
super(new BorderLayout(3, 3));
model = new MyModel();
table = new JTable(model);
table.setModel(model);
this.table.setPreferredScrollableViewportSize(new Dimension(700, 70));
this.table.setFillsViewportHeight(true);
JPanel ButtonOpen = new JPanel(new FlowLayout(FlowLayout.CENTER));
add(ButtonOpen, BorderLayout.SOUTH);
// Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);
// Add the scroll pane to this panel.
add(scrollPane, BorderLayout.CENTER);
//Create button panel
buttonsPanel = new JPanel();
buttonsPanel.setLayout(new FlowLayout(5, 50, 5));
//add 'Open button
JButton open = new JButton("Open...");
buttonsPanel.add(open);
//add 'Add' button
JButton add = new JButton("Add row");
buttonsPanel.add(add);
//add 'Remove' button
JButton remove = new JButton("Remove row");
buttonsPanel.add(remove);
//add 'Save' button
JButton save = new JButton("Save");
buttonsPanel.add(save);
//add 'Save as...' button
JButton saveAs = new JButton("Save As...");
buttonsPanel.add(saveAs);
//add buttonPanel to Frame
add(buttonsPanel, BorderLayout.SOUTH);
// add a nice border
setBorder(new EmptyBorder(10, 10, 10, 10));
//'Open' button action
open.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser fileopen = new JFileChooser();
FileFilter filter = new FileNameExtensionFilter(
"Text/CSV file", "txt", "csv");
fileopen.addChoosableFileFilter(filter);
int ret = fileopen.showDialog(null, "Choose file");
if (ret == JFileChooser.APPROVE_OPTION) {
// Read Text file
File file = fileopen.getSelectedFile();
T1Data.currentFile = file;
CSVFile Rd = new CSVFile();
MyModel NewModel = new MyModel();
table.setModel(NewModel);
ArrayList<String[]> Rs2 = Rd.ReadCSVfile(file);
NewModel.AddCSVData(Rs2);
System.out.println("Rows: " + NewModel.getRowCount());
System.out.println("Cols: " + NewModel.getColumnCount());
}
}
});
//'Add row' button action
/*
add.addActionListener(new ActionListener(){
new ActionListener() {
public void actionPerformed(ActionEvent e) {
int row = table.getSelectedRow();
if (row!=-1) model.deleteRow(row);
}
}
});
*/
//'Remove row' button action
remove.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int row = table.getSelectedRow();
if (row!=-1) model.deleteRow(row);
}
});
//'Save' button action
save.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e){
try{
//the file path
File file = currentFile;
//if the file not exist create one
if(!file.exists()){
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
//loop for jtable rows
for(int i = 0; i < table.getRowCount(); i++){
//loop for jtable column
for(int j = 0; j < table.getColumnCount(); j++){
bw.write(table.getModel().getValueAt(i, j)+";");
}
//break line at the begin
//break line at the end
bw.write("\r\n");
}
//close BufferedWriter
bw.close();
//close FileWriter
fw.close();
JOptionPane.showMessageDialog(null, "Dane zostały zapisane.");
}catch(Exception ex){
ex.printStackTrace();
}
}
});
//'Save As...' button action
saveAs.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e){
try{
JFileChooser chooser = new JFileChooser(".");
int status = chooser.showSaveDialog(T1Data.this);
if (status == JFileChooser.APPROVE_OPTION) {
//the file path
File file = chooser.getSelectedFile();
//if the file not exist create one
if(!file.exists()){
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
//loop for jtable rows
for(int i = 0; i < table.getRowCount(); i++){
//loop for jtable column
for(int j = 0; j < table.getColumnCount(); j++){
bw.write(table.getModel().getValueAt(i, j)+";");
}
//break line at the begin
//break line at the end
bw.write("\r\n");
}
//close BufferedWriter
bw.close();
//close FileWriter
fw.close();
JOptionPane.showMessageDialog(null, "File saved.");
}
}catch(Exception ex){
ex.printStackTrace();
}
}
});
}
// Method for reading CSV file
public class CSVFile {
private final ArrayList<String[]> Rs = new ArrayList<String[]>();
private String[] OneRow;
public ArrayList<String[]> ReadCSVfile(File DataFile) {
try {
BufferedReader brd = new BufferedReader(new FileReader(DataFile));
while (brd.ready()) {
String st = brd.readLine();
OneRow = st.split(";"); // OneRow = st.split(",|\\s|;");
Rs.add(OneRow);
System.out.println(Arrays.toString(OneRow));
} // end of while
} // end of try
catch (Exception e) {
String errmsg = e.getMessage();
System.out.println("File not found:" + errmsg);
} // end of Catch
return Rs;
}// end of ReadFile method
}// end of CSVFile class
private static void createAndShowGUI() {
// Create and set up the window.
JFrame frame = new JFrame("T1Data");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create and set up the content pane.
T1Data newContentPane = new T1Data();
frame.setContentPane(newContentPane);
// Display the window.
frame.pack();
frame.setVisible(true);
}
class MyModel extends AbstractTableModel {
//public boolean isCellEditable(int row, int col) { return true; } //CELL EDITING
private final String[] columnNames = { "Name", "Surname", "Age", "Email", "Telephone"};
private ArrayList<String[]> Data = new ArrayList<String[]>();
public void AddCSVData(ArrayList<String[]> DataIn) {
this.Data = DataIn;
this.fireTableDataChanged();
}
@Override
public int getColumnCount() {
return columnNames.length;// length;
}
@Override
public int getRowCount() {
return Data.size();
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public Object getValueAt(int row, int col) {
return Data.get(row)[col];
}
/*
DOESN'T WORK!!!!!!!!!!!!!!!!!!!1
// Deletes the given row
public void deleteRow(int row) {
if (row == -1) return;
Data.remove(row);
fireTableRowsDeleted(row, row);
}
*/
}
public static void main(String[] args) {
// Schedule a job for the event-dispatching thread:
// creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
}
最佳答案
当您在 open
JButton ActionListener
中加载 File
时,代码会创建一个新的 TableModel
并设置 JTable
模型:
MyModel NewModel = new MyModel();
table.setModel(NewModel);
NewModel
实例是此方法的本地实例,因此对实例变量 model
的任何更改都不会反射(reflect)在 JTable
中(在换句话说,model != table.getModel()
)。不要创建局部变量,而是将实例变量设置为新模型。例如:
model = new MyModel();//sets the instance variable to the new model
table.setModel(NewModel);
这样,每当代码引用 model
时,它都会作用于 JTable
的当前 TableModel
。或者,在更改 TableModel
时,您可以直接从 JTable
获取模型,并根据需要进行转换:
remove.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int row = table.getSelectedRow();
MyModel myModel = (MyModel)table.getModel();//get the model directly
if (row!=-1) myModel .deleteRow(row);
}
});
关于java - JTable - 添加、编辑、删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30330447/
猫f1.txt阿曼维沙尔阿杰贾伊维杰拉胡尔曼尼什肖比特批评塔夫林现在输出应该符合上面给定的条件 最佳答案 您可以在文件读取循环中设置一个计数器并打印它, 计数=0 读取行时做 让我们数一数++ if
我正在尝试查找文件 1 和文件 2 中的共同行。如果公共(public)行存在,我想写入文件 2 中的行,否则打印文件 1 中的非公共(public)行。fin1 和 fin2 是这里的文件句柄。它读
我有这个 SQL 脚本: CREATE TABLE `table_1` ( `IDTable_1` int(11) NOT NULL, PRIMARY KEY (`IDTable_1`) );
我有 512 行要插入到数据库中。我想知道提交多个插入内容是否比提交一个大插入内容有任何优势。例如 1x 512 行插入 -- INSERT INTO mydb.mytable (id, phonen
如何从用户中选择user_id,SUB(row, row - 1),其中user_id=@userid我的表用户,id 为 1、3、4、10、11、23...(不是++) --id---------u
我曾尝试四处寻找解决此问题的最佳方法,但我找不到此类问题的任何先前示例。 我正在构建一个基于超本地化的互联网购物中心,该区域分为大约 3000 个区域。每个区域包含大约 300 个项目。它们是相似的项
preg_match('|phpVersion = (.*)\n|',$wampConfFileContents,$result); $phpVersion = str_replace('"','',
我正在尝试创建一个正则表达式,使用“搜索并替换全部”删除 200 个 txt 文件的第一行和最后 10 行 我尝试 (\s*^(\h*\S.*)){10} 删除包含的前 10 行空白,但效果不佳。 最
下面的代码从数据库中获取我需要的信息,但没有打印出所有信息。首先,我知道它从表中获取了所有正确的信息,因为我已经在 sql Developer 中尝试过查询。 public static void m
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我试图在两个表中插入记录,但出现异常。您能帮我解决这个问题吗? 首先我尝试了下面的代码。 await _testRepository.InsertAsync(test); await _xyzRepo
这个基本的 bootstrap CSS 显示 1 行 4 列: Text Text Text
如果我想从表中检索前 10 行,我将使用以下代码: SELECT * FROM Persons LIMIT 10 我想知道的是如何检索前 10 个结果之后的 10 个结果。 如果我在下面执行这段代码,
今天我开始使用 JexcelApi 并遇到了这个:当您尝试从特定位置获取元素时,不是像您通常期望的那样使用sheet.getCell(row,col),而是使用sheet.getCell(col,ro
我正在尝试在我的网站上开发一个用户个人资料系统,其中包含用户之前发布的 3 个帖子。我可以让它选择前 3 条记录,但它只会显示其中一条。我是不是因为凌晨 2 点就想编码而变得愚蠢? query($q)
我在互联网上寻找答案,但找不到任何答案。 (我可能问错了?)我有一个看起来像这样的表: 我一直在使用查询: SELECT title, date, SUM(money) FROM payments W
我有以下查询,我想从数据库中获取 100 个项目,但 host_id 多次出现在 urls 表中,我想每个 host_id 从该表中最多获取 10 个唯一行。 select * from urls j
我的数据库表中有超过 500 行具有特定日期。 查询特定日期的行。 select * from msgtable where cdate='18/07/2012' 这将返回 500 行。 如何逐行查询
我想使用 sed 从某一行开始打印 n 行、跳过 n 行、打印 n 行等,直到文本文件结束。例如在第 4 行声明,打印 5-9,跳过 10-14,打印 15-19 等 来自文件 1 2 3 4 5 6
我目前正在执行验证过程来检查用户的旧密码,但问题是我无法理解为什么我的查询返回零行,而预期它有 1 行。另一件事是,即使我不将密码文本转换为 md5,哈希密码仍然得到正确的答案,但我不知道为什么会发生
我是一名优秀的程序员,十分优秀!