- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 AbstractTableModel 的 isCellEditable(row, column);
方法被覆盖,我检查过当我点击有问题的单元格时它返回 true
或 false
正确,但是,它不允许我编辑单元格:
private class KAMModel extends AbstractTableModel {
private final String[] column = {"Member Number", "Member Name", "Secondary Name", "Address", "Phone", "Tickets"};
private final Class<?>[] types = {Double.class, String.class, String.class, String.class, String.class, Integer.class};
private final boolean[] editable = {false, false, false, false, false, true};
private ArrayList<Object[]> data;
// skip other overridden methods
@Override
public boolean isCellEditable(int row, int column) {
System.out.println(editable[column]); // prints correct true/false based on the column
return editable[column];
}
}
为什么我会看到 isCellEditable
被触发,并且还正确地告诉我我的列是否可编辑,但我无法编辑该列。它只是突出显示该行。单元格已显示轮廓,但我无法对其进行编辑。
更新:
可运行代码:
package kiss;
import java.math.BigDecimal;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
public class kiss extends javax.swing.JFrame {
private KAMModel kam = new KAMModel();
public kiss() {
initComponents();
kam.search("", "", "", "", "");
}
@SuppressWarnings("unchecked")
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTable1.setModel(kam);
jScrollPane1.setViewportView(jTable1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(kiss.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(kiss.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(kiss.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(kiss.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new kiss().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
// End of variables declaration
private class KAMModel extends AbstractTableModel {
private final String[] column = {"Member Number", "Member Name", "Secondary Name", "Address", "Phone", "Tickets"};
private final Class<?>[] types = {Double.class, String.class, String.class, String.class, String.class, Integer.class};
private final boolean[] editable = {false, false, false, false, false, true};
private ArrayList<Object[]> data;
public KAMModel() {
super();
}
@Override
public Object getValueAt(int row, int col) {
return data.get(row)[col];
}
@Override
public int getColumnCount() {
return column.length;
}
@Override
public String getColumnName(int i) {
return column[i];
}
@Override
public int getRowCount() {
if (data == null) return 0;
return data.size();
}
@Override
public Class getColumnClass(int column) {
return types[column].getClass();
}
@Override
public boolean isCellEditable(int row, int column) {
System.out.println(editable[column]);
return editable[column];
}
public void search(String memberNumber, String acctNumber, String memberName, String phoneNumber, String address) {
data = new ArrayList<>();
data.add(new Object[] {"123456789", "John Smith", "Jane Smith", "123 Main St.", "555-555-1212", ""});
fireTableDataChanged();
}
@Override
public void fireTableDataChanged() {
super.fireTableDataChanged();
resizeColumns();
}
public void resizeColumns() {
float[] percents = {8f, 20f, 20f, 39f, 10f, 3f};
int tableWidth = jTable1.getWidth();
TableColumn tc;
TableColumnModel tcm = jTable1.getColumnModel();
for (int x = 0; x < 6; x++) {
tc = tcm.getColumn(x);
int cwidth = Math.round(percents[x] * tableWidth);
tc.setPreferredWidth(cwidth);
}
}
}
最佳答案
代码中有2处错误:
"123456789"
和 ""
,尽管这些值应该是 Double 和 Integer 类型Class.class
作为列类。将 return types[column].getClass();
替换为 return types[column];
。当然,您忘记实现 setValueAt()
,所以即使单元格是可编辑的,编辑后的值也不会存储在模型中。
关于java - 重写 AbstractTableModel 类中的 isCellEditable 方法后 JTable 不可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34421759/
添加一行并调用 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() 并且它显示了正确的索引。但不知何故,当我按下删除按钮时,这会导致在此类中调用
我是一名优秀的程序员,十分优秀!