- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个类。第一个类mainWindow扩展了JFrame
,其中我有一个JTable table1。在我的第二堂课中,我需要拿到这张 table 。当我在 mainWindow 中生成 getter 时,我需要执行 mainWindow win = new mainWindow();
以便遵循 win.getTable1();
。问题是 mainWindow win = new mainWindow();
东西打开了窗口,所以我最终得到了它两次。我如何从第二堂课中获取对 table1 的引用?
mainWindow.java
package windows;
import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import helpers.*;
public class mainWindow extends JFrame {
private final String fileName = "Studenten";
public studentTableModel model;
private JPanel rootPanel;
private JComboBox comboBox1;
private JTable table1;
private JButton generierenButton;
private calculations calc = new calculations();
public mainWindow() throws IOException {
super("Zufallsgenerator fürs Repetieren");
pack();
setContentPane(rootPanel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(1000, 700);
List<student> studentList = calc.readFromFile("Studenten");
model = new studentTableModel(studentList);
table1.setModel(model);
setVisible(true);
}
}
studentTableModel.java
package helpers;
import windows.mainWindow;
import javax.swing.table.AbstractTableModel;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class studentTableModel extends AbstractTableModel {
private calculations calc = new calculations();
private final List<student> students;
private final String[] columnNames = new String[] {
"Id", "Name", "Bereits x-Mal repetiert", "Wahrscheinlichkeit", "im Pot"
};
private final Class[] columnClass = new Class[] {
String.class, String.class, int.class, double.class, Boolean.class
};
public studentTableModel(List<student> students){
this.students = students;
}
@Override
public String getColumnName(int column){
return columnNames[column];
}
@Override
public Class<?> getColumnClass(int columnIndex)
{
return columnClass[columnIndex];
}
@Override
public int getColumnCount()
{
return columnNames.length;
}
@Override
public int getRowCount()
{
return students.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex)
{
student row = students.get(rowIndex);
if(0 == columnIndex) {
return row.getId();
}
else if(1 == columnIndex) {
return row.getName();
}
else if(2 == columnIndex) {
return row.getAnzahlRepetitonen();
}
else if(3 == columnIndex) {
return row.getWahrscheinlichkeit();
}
else if(4 == columnIndex) {
return row.isInPot();
}
return null;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex)
{
return true;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex)
{
student row = students.get(rowIndex);
if(0 == columnIndex) {
row.setId((String) aValue);
}
else if(1 == columnIndex) {
row.setName((String) aValue);
}
else if(2 == columnIndex) {
row.setAnzahlRepetitonen((Integer) aValue);
}
else if(3 == columnIndex) {
row.setWahrscheinlichkeit((Double) aValue);
}
else if(4 == columnIndex) {
row.setInPot((Boolean) aValue);
}
List<student> students1 = new ArrayList<student>();
//here I need to get the table data to save it to a file using the method in the next class
calc.saveToFile("newStudents", students1);
}
}
计算.java
package helpers;
import javax.swing.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class calculations {
public void saveToFile(String file,List<student> studentList){
int length = studentList.size();
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(file);
} catch (IOException e) {
e.printStackTrace();
return;
}
for (helpers.student student : studentList){
String id = student.getId();
String name = student.getName();
int rep = student.getAnzahlRepetitonen();
double wahrscheinlichkeit = student.getWahrscheinlichkeit();
boolean inPot = student.isInPot();
try {
fileWriter.write(id + ";" + name + ";" + Integer.toString(rep) + ";" + Double.toString(wahrscheinlichkeit) + ";" + Boolean.toString(inPot) + "\n");
} catch (IOException e) {
e.printStackTrace();
return;
}
}
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public List<student>readFromFile(String file){
List<student> studentList = new ArrayList<student>();
String line = null;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
try {
while ((line = br.readLine()) != null){
student st = null;
String[] cols = line.split(";");
String id = cols[0];
String name = cols[1];
int rep = Integer.parseInt(cols[2]);
double wahrscheinlichkeit = Double.parseDouble(cols[3]);
boolean isPot = Boolean.parseBoolean(cols[4]);
st = new student(id, name,rep, wahrscheinlichkeit, isPot);
studentList.add(st);
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
return studentList;
}
public List<student> getTableData(JTable table, List<student> studentList){
int rows = table.getModel().getRowCount();
for (int i = 0; rows >= i;){
String id = (String) table.getModel().getValueAt(i, 0);
String name = (String) table.getModel().getValueAt(i, 1);
int anzahl = (int) table.getModel().getValueAt(i, 2);
double prob = (Double) table.getModel().getValueAt(i, 3);
boolean inPot = (Boolean) table.getModel().getValueAt(i, 4);
studentList.add(new student(id, name, anzahl, prob, inPot));
System.out.println("Read row " + i);
}
return studentList;
}
}
更改监听器
table1.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
System.out.println("Change detected");
List<student> newStudentList = new ArrayList<student>();
calc.getTableData(table1, newStudentList);
System.out.println("Now saving...");
calc.saveToFile("newStudents", newStudentList);
}
});
最佳答案
the program should have printed "Change detected" once there was a change in the table, but nothing happened.
确实是addTableModelListener
...
[...] Adds a listener to the list that's notified each time a change to the data model occurs.
但是通过扩展抽象类AbstractTableModel
,您有责任使用提供的方法(例如fireTableDataChanged()
)引发此类通知。例如。具体何时执行由您决定,但 setValueAt
方法看起来是通知监听器的好地方,因为它是更改表数据的方法。
关于java - 如何在发生更改时将扩展 AbstractTableModel 的类保存到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34797942/
我对 Swift 比较陌生。我在 pickerView 中使用 PFQuery 时遇到了问题。 我正在尝试实现一个 2 组件 pickerView,如下所示: 组件 0:组件 1 “A”:“Altiv
packageUrl="http://192.168.0.112" packageUrl_line=`grep -n "packageUrl" ${file} | head -1 | cut -d "
我遇到了一个烦人的问题。我正在做一个消息传递应用程序。在消息页面中,当用户滚动到顶部时,一旦最上面的单元格可见,它将加载更多消息以显示。因为在加载更多消息时, TableView 的位置在顶部(内容偏
可以屏蔽吗 Jsoup.connect("http://xyz.com").get().html(); 作为对网站的浏览器调用? 我尝试构建一个壁纸下载工具,但在从服务器下载页面时遇到问题。 如果我下
IntelliJ 给了我以下代码的提示: val l = List(0, "1", 2, "3") l.foreach{_ match {case xx:Int => println(xx);case
我正在尝试读取使用三个水平点表示缺失值的 excel 文件,例如... https://population.un.org/wpp/Download/Files/1_Indicators%20(Sta
我有一个 NSPopupButton,其内容绑定(bind)到 NSArray,假设该数组是 @[ @"Option 1", @"Option 2" ]; 其选择的对象绑定(bind)
大家好,我希望您能回答这个问题:) 基本上,我的index.html中有一些html 5视频,并且会自动播放背景音频。 我想发生的是在播放视频标签时将背景音频减少到50%。如果可能的话,如果我可以使用
需要一点帮助来解决这个问题。我的目标是拥有一个可执行的 jar 文件,它可以截取网页的屏幕截图,并且可以在 Windows 和 Linux 机器上运行。我尝试过使用 html2image 但 phan
我知道如何将 comboBox 值插入到 sql 中,但不知道如何在 sql 中用数字替换 comboBox 值。 这是我的组合框编码和处理按钮的一部分。 用户.java JComboBox com
我有一个像这样的 XML 片段: WEL SMIO 01/01/2015 12/31/9999 AAE 01/01/2015
好的,我知道每个人都认为 IFrame 不好,我知道这一点。但我“被要求”在极少数情况下使用一个。 所以我的问题是,当您有一个包含 IFrame 的 .aspx 页面,然后在该 IFrame 中有另一
我有一个 React 应用程序,我在其中使用 axios 库来获取一些值,并将它们设置为处于我状态的 javascript 对象数组 componentDidMount(){ axios.
我必须存储我的 HashMap通过Spring data导入数据库MySql。为了从 HashMap 检索数据,我使用键值,并且可能会发生键不存在的情况,在这种情况下,我必须避免使用 set 方法将值
我有 Size 模型,其中 value 作为字符串。我想根据 value 属性通过将其转换为十进制来排序 size。 has_many :sizes, -> {order 'value ASC'},这
嗨,我有一个 MYSQL 表,例如 PART{ part_id :long,Auto Increment parent_part_id :long root_part_id :long } 我需
我正在尝试将列名为“邮政编码”、“2010 年人口”、“Land-Sq-Mi”和“每平方英里密度”的 CSV 文件导入我的测试表,该表名为 derp--这就是我在开头使用 drop 语句的原因,这样我
我想写一个这样的存储过程: CREATE OR REPLACE FUNCTION my_function(param_1 text, param_2 text DEFAULT NULL::text)
我有一个 RecyclerView,在它之上,有一个 AdView。滚动 RecyclerView 时,我想将 Adview 留在固定位置。我该怎么做? 这是我打开应用程序时的 RecyclerVie
我有一个 UIScrollView,其中包含一个 UIView 容器,该容器包含多个 UITextField。 我想执行以下操作:如果我选择一个字段并且它位于键盘下方,则将文本字段提升到键盘上方 20
我是一名优秀的程序员,十分优秀!