- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我引用了很多方法。即fireTableCellUpdated 的有效方法。但其实我还是不申请。
DETA值更新后如何使表内容更新。
方法我调用GJJ方法实现。虽然更新了但是出现了很多新的窗口。这不是我的需要。
告诉我如何在新窗口中添加一个按钮和监听按钮来执行更新行为 friend 告诉我怎么做。
class MyTable extends AbstractTableModel {
Object p[][]={
{DETA_1_1,DETA_1_2, DETA_1_3, DETA_1_4, DETA_1_5},
{DETA_2_1,DETA_2_2, DETA_2_3, DETA_2_4, DETA_2_5},
{DETA_3_1,DETA_3_2, DETA_3_3, DETA_3_4, DETA_3_5},
{DETA_4_1,DETA_4_2, DETA_4_3, DETA_4_4, DETA_4_5},
{DETA_5_1,DETA_5_2, DETA_5_3, DETA_5_4, DETA_5_5},
{DETA_6_1,DETA_6_2, DETA_6_3, DETA_6_4, DETA_6_5},
{DETA_7_1,DETA_7_2, DETA_7_3, DETA_7_4, DETA_7_5},
{DETA_8_1,DETA_8_2, DETA_8_3, DETA_8_4, DETA_8_5},
{DETA_9_1,DETA_9_2,DETA_9_3,DETA_9_4,DETA_9_5},
{DETA_10_1,DETA_10_2,DETA_10_3,DETA_10_4,DETA_10_5},
{DETA_11_1,DETA_11_2,DETA_11_3,DETA_11_4,DETA_11_5},
{DETA_12_1,DETA_12_2,DETA_12_3,DETA_12_4,DETA_12_5},
{DETA_1_3_1,DETA_1_3_2,DETA_1_3_3,DETA_1_3_4,DETA_1_3_5},
{DETA_1_4_1,DETA_1_4_2, DETA_1_4_3, DETA_1_4_4, DETA_1_4_5},
{DETA_15_1,DETA_15_2,DETA_15_3,DETA_15_4,DETA_15_5},
{DETA_16_1,DETA_16_2,DETA_16_3,DETA_16_4,DETA_16_5},
{DETA_17_1,DETA_17_2,DETA_17_3,DETA_17_4,DETA_17_5},
{DETA_1_8_1,DETA_1_8_2,DETA_1_8_3,DETA_1_8_4,DETA_1_8_5},
{DETA_19_1,DETA_19_2,DETA_19_3,DETA_19_4,DETA_19_5}
};
String[] n = { "NO","CARD","NAME","NAME2","time" };
public int getColumnCount() {
return n.length;
}
public int getRowCount() {
return p.length;
}
public String getColumnName(int col) {
return n[col];
}
public Object getValueAt(int row, int col) {
return p[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}
private void GJJ() {
JFrame f = new JFrame();
MyTable mt = new MyTable();
JTable t = new JTable(mt);
t.setPreferredScrollableViewportSize(new Dimension(550, 30));
JScrollPane s = new JScrollPane(t);
f.getContentPane().add(s, BorderLayout.CENTER);
f.setTitle("coolman");
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
最佳答案
你的问题有点含糊。 “更新”表模型可以是更新现有模型(即编辑数据)和/或添加新行。
我已经对两者做了一个简单的例子。
当编辑一行时,模型和表格会自行更新,因此您无需执行任何操作,但是,如果您添加或删除行,您将负责自己触发更新事件。
public class TestTableModel {
public static void main(String[] args) {
new TestTableModel();
}
public TestTableModel() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
final MyTableModel tableModel = new MyTableModel();
final JTable table = new JTable(tableModel);
JButton addButton = new JButton("Add");
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tableModel.add();
}
});
JButton updateButton = new JButton("Update");
updateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int row = table.getSelectedRow();
if (row > -1) {
table.setValueAt("Banana", row, 0);
}
}
});
JPanel buttonPane = new JPanel();
buttonPane.add(addButton);
buttonPane.add(updateButton);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(table));
frame.add(buttonPane, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
public class MyTableModel extends AbstractTableModel {
private List<Person> lstPeople;
public MyTableModel() {
lstPeople = new ArrayList<Person>(25);
lstPeople.add(new Person("Darryl Garton", randomAge()));
lstPeople.add(new Person("Neil Willison", randomAge()));
lstPeople.add(new Person("Darryl Hege", randomAge()));
lstPeople.add(new Person("Karina Jerry", randomAge()));
lstPeople.add(new Person("Erik Leddy", randomAge()));
lstPeople.add(new Person("Chandra Kehrer", randomAge()));
lstPeople.add(new Person("Katy Sapien", randomAge()));
lstPeople.add(new Person("Lonnie Blakes", randomAge()));
lstPeople.add(new Person("Kelly Ruocco", randomAge()));
lstPeople.add(new Person("Fernando Mckinnie", randomAge()));
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
protected int randomAge() {
return (int)Math.round(Math.random() * 99) + 1;
}
@Override
public int getRowCount() {
return lstPeople.size();
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public String getColumnName(int column) {
String name = null;
switch (column) {
case 0:
name = "Name";
break;
case 1:
name = "Age";
break;
}
return name;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
Class clazz = String.class;
switch (columnIndex) {
case 1:
clazz = Integer.class;
break;
}
return clazz;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object value = null;
Person person = lstPeople.get(rowIndex);
switch (columnIndex) {
case 0:
value = person.getName();
break;
case 1:
value = person.getAge();
break;
}
return value;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Person person = lstPeople.get(rowIndex);
switch (columnIndex) {
case 0:
if (aValue instanceof String) {
person.setName(aValue.toString());
}
break;
case 1:
if (aValue instanceof Integer) {
person.setAge((Integer)aValue);
}
break;
}
fireTableCellUpdated(rowIndex, columnIndex);
}
public void add() {
lstPeople.add(new Person());
fireTableRowsInserted(lstPeople.size() - 1, lstPeople.size() - 1);
}
}
}
您可能希望阅读 How to use tables了解更多信息
关于java - 如何更新 AbstractTableModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13505690/
添加一行并调用 fireTableRowInserted() 还是添加所有行然后调用 fireTableDataChanged() 是个好主意? 最佳答案 如果您所做的只是添加新行,最好添加所有行,然
我正在尝试用 VCID 和 VCIDBACKUP 的空值替换“Dont Have”。这是我的代码: if (controladorExcel == false) { Writa
我有这个表模型,并且我插入以这种方式调用的值: lista.setModel(new SimpleTableModel(dados, colunas)); lista 是 JTable 型号:
我的表格模型在更新其中打印的数据时遇到问题。 我有作为表模型的 AgendaTableModel 类和作为主 UI 的 Screen 类,当我按下“Listar Contatos”按钮时,表模型应该出
我正在开发一个小程序,它应该在 JTable 中显示食谱。一切似乎都工作正常,我遇到的唯一问题是我无法初始化应该正确保存数据的对象。这是让我头疼的类(class): class RecipeTable
我有一个类,它实际上是一些数据的列表,它扩展了AbstractTableModel。此类中的数据存储在线程安全的数组列表中。 但是,如果我想添加一些数据,可以说我在扩展 AbstractTableMo
我引用了很多方法。即fireTableCellUpdated 的有效方法。但其实我还是不申请。 DETA值更新后如何使表内容更新。 方法我调用GJJ方法实现。虽然更新了但是出现了很多新的窗口。这不是我
我找到的例子: http://www.java2s.com/Code/Java/Swing-Components/ButtonTableExample.htm显示如何创建具有指定列(按钮)的 JTab
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有两个类。第一个类mainWindow扩展了JFrame,其中我有一个JTable table1。在我的第二堂课中,我需要拿到这张 table 。当我在 mainWindow 中生成 getter
在设置特定外观后序列化扩展 AbstractTableModel 的类会导致 java.io.NotSerializedException: com.sun.java.swing.plaf.windo
我有一个扩展 JTable 的类,我想将其设置为 AbstractTableModel,但我了解其可能性的唯一方法是调用 使用 super 的 JTable 构造函数。 但是,我需要在调用构造函数之前
我设法潜伏并找到一个可以替代的好类(class) JTable(Object[][] data, Object[] columnNames)与 RowTableModel(List modelData
嘿。我正在尝试使用 AbstractTableModel 构建一个简单的 JTable,但即使我使用了 JScrollPane,列名称也不会出现。 public class TableModel ex
我有一些数据从我的数据库加载并作为公共(public)静态列表存储在另一个类中,我无法访问 MyTableModel 类中的数据以在 jtable 中存储和查看它们...还有许多其他方法可以用我的数据
是否可以动态更改 AbstractTableModel 列名称? 我正在尝试实现setColumnName(0, "Speed rpm")方法。 public class MyModel extend
我想根据我使用 AbstractTableModel 指定的列从数据库的表中提取数据。表中有 8 列,但只想显示 8 列中的 3 列。 例如: 数据库具有以下列:ID、First_Name、Last_
我已经实现了一个 AbstractTableModel 对象,它是一种时间表。我想将当时将通过使用方法教授的主题写入单元格(因此我不想将行声明为已编译)。我能怎么做?这是我的 AbstractTabl
我正在尝试将 JTable(类型 AbstractTableModel)中编辑的行保存到文件中。我不知道该怎么做;或者可以使用 ObjectOutput 和 InputStream。 此外,我想在保存
我正在制作一个 Swing 项目。可能太大了,无法粘贴到这里。我什至尝试记录 table.getSelectedRow() 并且它显示了正确的索引。但不知何故,当我按下删除按钮时,这会导致在此类中调用
我是一名优秀的程序员,十分优秀!