本人以前没有做过swing的开发。现在做的项目有以下需求,不得其解,请牛人帮忙。
问题:
我有一个table,有N行,N列.当我在同一行的第4列,第5列输入数据后,第6列会自动输入一个数据.第6列的数据是,4,5列的和。
期待高人解答,要代码。
问题:
我有一个table,有N行,N列.当我在同一行的第4列,第5列输入数据后,第6列会自动输入一个数据.第6列的数据是,4,5列的和。
期待高人解答,要代码。
解决方案 »
- SWT在shell上画多个Canvas,怎么实现?我用循环画多个,显示的却只有最后一个
- JDK升级安装的问题?非常紧急
- 接口中的内部类问题?
- 在JMF中的sessionlabel类,介绍一下
- Java基础问题:为什么Java里的静态方法没办法调用动态方法和变量?
- 请各位高手帮忙分析我的这段小代码,有些地方我总是不能明白!
- java c/s 模式里面,哪里可以找到时间控件?
- 怎样在JFrame中调用一个图片???
- farawayzheng_necas(遥远)接分!
- 急:java中如何与word通讯?
- 搞JAVA EE还是搞Android?
- Thread和Socket问题,通过TCP将多个线程通信,现在需要完成的是一个窗口发其它的窗口都能收到,请高手帮忙看看哪里出错了
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;public class TestTableFrame extends JFrame
{
private JTable table;
private TableModel model;
public TestTableFrame()
{
model = new DefaultTableModel(10, 10);
model.addTableModelListener(new TableModelListener()
{
public void tableChanged(TableModelEvent event)
{
if (event.getColumn() == 3 || event.getColumn() == 4)
{
int row = event.getFirstRow();
Object o1 = model.getValueAt(row, 3);
Object o2 = model.getValueAt(row, 4);
if (o1 == null || o2 == null)
{
return;
}
int num1 = Integer.parseInt((String) o1);
int num2 = Integer.parseInt((String) o2);
model.setValueAt(num1 + num2, row, 5);
}
}
});
table = new JTable(model);
table.setRowSelectionAllowed(true);
table.setColumnSelectionAllowed(true);
add(new JScrollPane(table));
}
public static void main(String[] args)
{
JFrame frame = new TestTableFrame();
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;public class TestJTable extends JFrame { private JTable table = new JTable(20, 6); public TestJTable() {
this.setSize(800, 600);
table.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
int col = e.getColumn();
int row = e.getFirstRow(); // 可能会发生多行同时修改,但这里只考虑一行
if (col == 3 || col == 4) { // 因为列数从0开始算,所以要减一
double v4 = 0;
try {
v4 = Double.valueOf(String.valueOf(table.getValueAt(row, 3)));
} catch (NumberFormatException ex) { // 主要是防止输入的不是数值
}
double v5 = 0;
try {
v5 = Double.valueOf(String.valueOf(table.getValueAt(row, 4)));
} catch (NumberFormatException ex) { // 主要是防止输入的不是数值
}
table.setValueAt(v4 + v5, row, 5); // 设置值,如果规则没做好,可能会循环触发更新事件而导致调用栈溢出。
}
}
});
this.add(table, BorderLayout.CENTER);
}
public static void main(String[] args) {
TestJTable wnd = new TestJTable();
wnd.setDefaultCloseOperation(EXIT_ON_CLOSE);
wnd.setVisible(true);
}
}