- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很抱歉提出了一个已经以各种形式被多次提出的问题,但我尚未找到有效的完整答案。我想做的就是将一行追加到表模型中。我尝试过用很多不同的方式来做这件事,但总是遇到类似的问题(或者有时是新的和令人兴奋的问题)。无论如何,当我尝试添加行时,我收到“ArrayIndexOutOfBoundsException”错误。我在下面的代码中标记了发生错误的行。我还包含了我看到的错误和我一直在使用的调试输出。我知道我实际上并不需要为您在此处看到的内容扩展 DefaultTableModel,但这是一个精简版本,我一直在使用它来追踪错误。
异常(exception):
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 > 0 at java.util.Vector.insertElementAt(Vector.java:594) at javax.swing.table.DefaultTableModel.insertRow(DefaultTableModel.java:374) at javax.swing.table.DefaultTableModel.addRow(DefaultTableModel.java:350) at javax.swing.table.DefaultTableModel.addRow(DefaultTableModel.java:361) at SMC.RoleCard$1.actionPerformed(RoleCard.java:69) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2719) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:688) at java.awt.EventQueue$3.run(EventQueue.java:686) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:702) at java.awt.EventQueue$4.run(EventQueue.java:700) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:699) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
调试输出:
There are 2 elements in roleData
roleData has 2 elements
Performing WHILE loop
tableData[0][0] is assigned ECC
tableData[0][1] is assigned 1
Performing WHILE loop
tableData[1][0] is assigned Portal
tableData[1][1] is assigned 2
Called getColumnCount()
Returned 2
tableDate has 2 columns and 2 rows.
Called getColumnCount()
Returned 2
Called getColumnName()
Returned Role
Called getColumnCount()
Returned 2
Called getColumnName()
Returned Sort Order
Called getColumnCount()
Returned 2
arg is :Role Data:
Clicked on Role
Called getColumnClass()
Called getColumnClass()
Called getColumnClass()
Called getColumnClass()
B: There are 2 rows in RoleTableModel
Add was pressed
代码:
package SMC;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
/**
* @author Larry Krigbaum
*/
public class RoleCard
{
public JPanel getRoleCard()
{
final JPanel roleCard = new JPanel();
roleCard.setLayout(new BoxLayout(roleCard, BoxLayout.PAGE_AXIS));
roleCard.setAlignmentX(Component.CENTER_ALIGNMENT);
JPanel role_title = new JPanel();
role_title.add(new JLabel(" "));
role_title.add(new JLabel("Configure SAP Roles"));
role_title.add(new JLabel(" "));
roleCard.add(role_title);
final JPanel role_table = new JPanel();
String[] roleColumnNames = {"Role", "Sort Order"};
ArrayList<Role> roleData = Role.loadRoleData();
System.out.println("There are " + roleData.size() + " elements in roleData");
//ArrayList<Role> roleData = null;
final RoleTableModel roleTableModel = new RoleTableModel(roleColumnNames, roleData);
JTable roleEditTable = new JTable(roleTableModel);
roleEditTable.setAutoCreateRowSorter(true);
//final DefaultTableModel roleTableModel = (DefaultTableModel) roleEditTable.getModel();
//final JTable roleEditTable = getRoleTable();
role_table.add(new JScrollPane(roleEditTable)); // ScrollPane needed to show headers
roleCard.add(role_table);
JPanel buttonPanel = new JPanel();
JButton addButton = new JButton("Add");
addButton.setActionCommand("Add");
JButton deleteButton = new JButton("Delete");
deleteButton.setActionCommand("Delete");
final JButton cancelButton = new JButton("Cancel");
cancelButton.setActionCommand("Cancel");
cancelButton.setEnabled(false);
buttonPanel.add(addButton);
buttonPanel.add(deleteButton);
buttonPanel.add(cancelButton);
roleCard.add(buttonPanel);
addButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("B: There are " + roleTableModel.getRowCount() + " rows in RoleTableModel");
System.out.println("Add was pressed");
cancelButton.setEnabled(true);
Object[] newRole = null;
roleTableModel.addRow(newRole);
//Object[] newRole = new Object[] {" ", " "};
System.out.println("A: There are " + roleTableModel.getRowCount() + " rows in RoleTableModel");
//roleTableModel.setRowCount((roleTableModel.getRowCount()) + 1);
System.out.println("B: There are " + roleTableModel.getRowCount() + " rows in RoleTableModel");
roleTableModel.fireTableRowsInserted(roleTableModel.getRowCount(), roleTableModel.getRowCount());
roleTableModel.fireTableDataChanged();
}
});
deleteButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("Delete was pressed");
cancelButton.setEnabled(true);
}
});
cancelButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("Cancel was pressed");
cancelButton.setEnabled(false);
}
});
return roleCard;
}
class RoleTableModel extends DefaultTableModel
{
private String[] roleColumnNames = {"Role", "Sort Order"};
private Object[][] tableData;
public RoleTableModel(String[] roleColumnNames, ArrayList<Role> roleData)
{
System.out.println("roleData has " + roleData.size() + " elements");
tableData = new Object[roleData.size()][2];
Role role = new Role();
Collections.sort(roleData, Role.MakeComparator);
Iterator rolesOrderByRole = roleData.iterator();
int i = 0;
while (rolesOrderByRole.hasNext())
{
System.out.println("Performing WHILE loop");
role = (Role)rolesOrderByRole.next();
tableData[i][0] = role.xrole;
System.out.println("tableData[" + i + "][0] is assigned " + tableData[i][0]);
tableData[i][1] = role.sortOrder;
System.out.println("tableData[" + i + "][1] is assigned " + tableData[i][1]);
i++;
}
System.out.println("tableDate has " + getColumnCount() + " columns and " + getRowCount() + " rows.");
}
@Override
public int getColumnCount()
{
System.out.println("Called getColumnCount()");
System.out.println("Returned " + roleColumnNames.length);
return roleColumnNames.length;
}
@Override
public int getRowCount()
{
if (tableData == null)
return 0;
return tableData.length;
}
@Override
public String getColumnName(int col)
{
System.out.println("Called getColumnName()");
System.out.println("Returned " + roleColumnNames[col]);
return roleColumnNames[col];
}
@Override
public Object getValueAt(int row, int col)
{
return tableData[row][col];
}
@Override
public Class getColumnClass(int c)
{
System.out.println("Called getColumnClass()");
return getValueAt(0, c).getClass();
}
/*
* Don't need to implement this method unless your table's
* editable.
*/
@Override
public boolean isCellEditable(int row, int col)
{
System.out.println("Called isCellEditable()");
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
return true;
}
/*
* Don't need to implement this method unless your table's
* data can change.
*/
@Override
public void setValueAt(Object value, int row, int col)
{
System.out.println("Called setValueAt()");
tableData[row][col] = value;
fireTableCellUpdated(row, col);
}
}
最佳答案
您正在通过扩展 DefaultTableModel 创建表模型。但是,您不是委托(delegate)其方法来存储数据,而是将它们存储在单独的数据数组中。并且您重写了一些方法而不是其他方法。结果是,有时,使用父类(super class)的方法,尝试在父类(super class)持有的 vector 中获取和插入数据,有时,使用子类方法,从子类数组获取和设置值数据。
如果您需要定义自定义 TableModel 实现,请扩展 AsbtractTableModel 并根据需要定义所有内容,或者扩展 DefaultTableModel 但不添加定义任何字段。只重写需要重写的方法,并委托(delegate)给父类(super class)方法。
除了 getColumnClass()
之外,我没有看到任何理由重写 DefaultTableModel 中的任何方法。
关于java - 将行添加到数据模型时出现 ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17706936/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!