- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TableModelListener(第 87 行/HERE-1)是否会干扰我的 JTable 的 addRow 方法(第 139 行,HERE-2)?如果是这样我该如何解决?
此代码可以编译,但当我使用“添加行”按钮时会引发错误。错误是:(堆栈跟踪要长得多,但我已将其减少为有关我的类而不是 java API 的行)
线程“AWT-EventQueue-0”中的异常java.lang.ArrayIndexOutOfBoundsException:
在 HPLC.addRow(HPLC.java:142)
在 HPLC.lambda$new$1(HPLC.java:109)
自从我添加 TableModelListener 以来,这才成为一个问题。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
class HPLC extends JFrame
{
public static void main (String [] args)
{
new HPLC();
}
HPLC()
{
//create window
JFrame frame = new JFrame();
frame.setTitle("HPLC Calculator");
frame.setSize(500,750);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
//row 0
JLabel title = new JLabel("HPLC Gradient Calculator");
gridBagAdd(panel, title, 0,0,4,1, GridBagConstraints.CENTER);
//row 1
JLabel flowLabel = new JLabel("Flow rate");
gridBagAdd(panel, flowLabel, 0,1,1,1, GridBagConstraints.CENTER);
JTextField flow = new JTextField(5);
gridBagAdd(panel, flow, 1,1,1,1, GridBagConstraints.CENTER);
JLabel mlMinLabel = new JLabel("ml/min");
gridBagAdd(panel, mlMinLabel, 2,1,1,1, GridBagConstraints.CENTER);
//row 2
JLabel numInjLabel = new JLabel("Number of injections");
gridBagAdd(panel, numInjLabel, 0,2,1,1, GridBagConstraints.CENTER);
JTextField numInj = new JTextField(5);
gridBagAdd(panel, numInj, 1,2,1,1, GridBagConstraints.CENTER);
//row 3
JLabel volALabel = new JLabel("Volume of A");
gridBagAdd(panel, volALabel, 0,3,1,1, GridBagConstraints.CENTER);
JTextField volA = new JTextField(5);
volA.setEditable(false);
gridBagAdd(panel, volA, 1,3,1,1, GridBagConstraints.CENTER);
JLabel volBLabel = new JLabel("Volume of B");
gridBagAdd(panel, volBLabel, 2,3,1,1, GridBagConstraints.CENTER);
JTextField volB = new JTextField(5);
volB.setEditable(false);
gridBagAdd(panel, volB, 3,3,1,1, GridBagConstraints.CENTER);
//row 4
JButton calculate = new JButton("calculate");
gridBagAdd(panel, calculate, 0,4,1,1, GridBagConstraints.CENTER);
JButton addRow = new JButton("add row");
gridBagAdd(panel, addRow, 1,4,1,1, GridBagConstraints.CENTER);
JButton removeRow = new JButton("remove row");
gridBagAdd(panel, removeRow, 2,4,1,1, GridBagConstraints.CENTER);
//the gradient table
String[] columns = {"Time", "%A", "%B"};
DefaultTableModel model = new DefaultTableModel(columns, 2)
{
public boolean isCellEditable(int row, int column)
//this overrides the default method to suit these conditions to make the 3rd column read only
{
if (column == 2)
return false;
return true;
}
};
JTable table = new JTable(model);
table.setFillsViewportHeight(true);
JScrollPane tablePane = new JScrollPane(table);
gridBagAdd(panel, tablePane, 0,5,4,4, GridBagConstraints.CENTER);
table.getModel().addTableModelListener(new TableModelListener()
//HERE-1 {
public void tableChanged(TableModelEvent e)
//overriding the TableModelListener method
{
//the basics in order to get the table cell
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
String ColumnName = model.getColumnName(column);
Object data = model.getValueAt(row, column);
//what i do with that cell
volB.setText(data.toString());
}
});
//button methods
calculate.addActionListener(e -> calculate(model, volA));
addRow.addActionListener(e -> addRow(model));
removeRow.addActionListener(e -> removeRow(model));
//make visible
frame.add(panel);
frame.setVisible(true);
}
//method for placement of components
private void gridBagAdd(JPanel p, JComponent c, int x, int y, int width, int height, int align)
{
GridBagConstraints gc = new GridBagConstraints();
gc.gridx = x;
gc.gridy = y;
gc.gridwidth = width;
gc.gridheight = height;
gc.weightx = 100;
gc.weighty = 100;
gc.insets = new Insets(5,5,5,5);
gc.anchor = align;
gc.fill = GridBagConstraints.NONE;
p.add(c, gc);
}
//button method execution
private void calculate(DefaultTableModel model, JTextField volA)
{
int rowCount = model.getRowCount();
String msg = rowCount + " rows";
volA.setText(msg);
}
private void addRow(DefaultTableModel model)
{
int colCount = model.getColumnCount();
//HERE-2 Object [] newRow = new Object[colCount];
model.addRow(newRow);
}
private void removeRow(DefaultTableModel model)
{
int rowCount = model.getRowCount();
if (rowCount > 2)
model.removeRow(rowCount -1);
}
}
我希望我的表做的是根据表的内容创建一个数组,以便执行计算。添加了 TableModelListener,以便 %B 列将自动完成以给出总计 100%。
我是自学成才的,这是第一次有人看到我的代码。如果您对如何改进我的写作方法有任何建议,我很乐意听到。
最佳答案
The TableModelListener has been added so that the %B column will auto complete to give a total of 100%
该事件会告诉您它生成的原因。在我看来,您只想在更改单元格中的值时执行代码。
所以代码应该是这样的:
public void tableChanged(TableModelEvent e)
{
if (e.getType() == TableModelEvent.UPDATE)
{
// add processing here
}
}
有关工作示例,请查看:JTable -> TableModeListener
关于java - JTable/DefaultTableModel 中的 TableModelListener 和 addRow 干扰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40192911/
我有一个 jTable,显示一个简单的两列 SQL 表的数据并允许用户维护该列表。这是我的第一个java程序。使其正常工作,以便用户可以编辑数据列表并按“保存”进行更新。我从这行代码获取 jTable
由于某种奇怪的原因,每次我在任何单元格中编辑数据并确认它时一旦我进入下一个,它就会从之前编辑的单元格复制数据 有什么想法吗? public class CheckoutTableModel exten
我有3个类(class) 首先从数据库获取数据 第二个为共同作品 其他用于展示表。 public class TableContent { private final Vector headers;
我的 DefaultTableModel 有问题,它不会向我显示表中的列,有一部分代码: JTable table = new JTable() { public boolean is
我有这个测试文件 text_file我的 TableView 是 enter image description here我想将每一行与每一列相匹配(第一行-第一列,第二行-第二列,等等。)错误在哪里
如何在 DefaultTableModel dtm = new DefaultTableModel(); 上添加标题和数据而不放置 new DefaultTableModel(在此内部)?我尝试使用
我的 Java GUI 中显示了一个表,用户可以通过单击“添加”按钮向其中添加行。添加到表格的行中的单元格默认都是可编辑的,用户可以根据需要选择每一行/单元格。 我现在想要添加从表中删除行的功能,但我
我有数据关系 Person-Attends-Course Person ------- id: integer primary key name: string prename: string age
我正在制作一个 GUI 简单的日历程序。我使用 DefaultTableModel 和 DefaultTableCellRenderer 显示日历的月 View 。我的日历设置为突出显示今天的日期。我
新数据输入数据库后,我的 JTable 没有刷新。我需要终止并再次执行才能看到结果。我包括了 DefaultTableModel 和 fireTableDataChanged。我还错过了什么?谢谢!
http://codepaste.net/ujhdq2 private Connection Econn; private DefaultTableModel examTable =
我使用 SwingWorker 根据数据库中的更改更改 DefaultTableModel。我的问题是:在 doInBackground() 中向 DefaultTableModel 添加 ListS
更新了问题,具体问题是数据没有显示,因为没有列: run: [java] Aug 04, 2014 8:17:00 PM net.bounceme.dur.client.gui.Applic
我一直在尝试将一些数据从 Editable JComboBox 发送到 JXTable。它的代码如下: private void selectTestActionPerformed(java.awt.
我有一个用 Object[][] 数组填充的 DefaultTableModel。 现在我想添加一个带有复选框的列并相应地执行操作。 当我将复选框添加到 Object[][] 数组并查看它时,我会显示
这个类与我的数据库通信检索数据并将它们投影到 JTable。我使用了 DefaultTableModel 但列名不会出现。我在另一个类中实例化这个类,我通过 检索包含数据的表获取表格()。 packa
我正在使用 Java Swingx 框架。我的 DefaultTableModel 对象中有 4 列。我只想显示其中 3 列。但是,我需要全部四个来进行计算。 实际数据模型 S.No. |身份证 |
我在 NetBeans 中使用 DefaultTableModel 来显示 MySQL 数据库中的记录。我的数据能够显示,但我想要的是在表格末尾显示一个复选框列。 我知道它需要被覆盖,但我不知道如何以
List myProducts = getMyProducts();//create an arraylist; Vector dataVector = new Vector(myProducts);
是的,我知道,这听起来很愚蠢。但在此之前,让我先说明一下我的问题。 我有一个带有大量 JTable 的 GUI。我有各种 DefaultTableModel,每个 JTable 一个。所以,1:1。对
我是一名优秀的程序员,十分优秀!