我是靠谱客的博主 纯情外套,最近开发中收集的这篇文章主要介绍java jtable 获取内容_从java中的jtable单元获取最新值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Can someone give an example of question below:

import java.awt.*;

import java.awt.event.ActionEvent;

import java.util.Random;

import java.util.concurrent.*;

import javax.swing.*;

import javax.swing.event.*;

import javax.swing.table.DefaultTableModel;

public class ChangeNotifiersOnEvent extends JFrame implements Runnable {

private static final long serialVersionUID = 1L;

private boolean runProcess = true;

private Random random = new Random();

private javax.swing.Timer timerRun;

private Executor executor = Executors.newCachedThreadPool();

private String[] columnNames = {"Source", "Hit", "Last", "Ur_Diff"};

private JTable table;

private Object[][] data = {{"Swing Timer", 2.99, 5, 1.01},

{"Swing Worker", 7.10, 5, 1.010}, {"TableModelListener", 25.05, 5, 1.01}};

private DefaultTableModel model = new DefaultTableModel(data, columnNames);

public ChangeNotifiersOnEvent() {

table = new JTable(model) {

private static final long serialVersionUID = 1L;

@Override

public Class getColumnClass(int column) {

return getValueAt(0, column).getClass();

}

};

model.addTableModelListener(new TableModelListener() {

@Override

public void tableChanged(TableModelEvent tme) {

if (tme.getType() == TableModelEvent.UPDATE) {

if (tme.getColumn() == 1 && tme.getLastRow() == 2) {

double dbl = ((Double) table.getModel().getValueAt(2, 1))

- ((Integer) table.getModel().getValueAt(2, 2));

table.getModel().setValueAt(dbl, 2, 3);

} else if (tme.getColumn() == 1 && tme.getLastRow() == 0) {

prepareUpdateTableCell();

} else if (tme.getColumn() == 1 && tme.getLastRow() == 1) {

executor.execute(new MyTask(MyTask.UPDATE_TABLE_COLUMN));

}

}

}

});

table.setRowHeight(30);

table.setFont(new Font("Serif", Font.BOLD, 20));

table.getColumnModel().getColumn(0).setPreferredWidth(180);

table.setPreferredScrollableViewportSize(table.getPreferredSize());

JScrollPane scrollPane = new JScrollPane(table);

add(scrollPane, BorderLayout.CENTER);

new Thread(this).start();

}

private void prepareUpdateTableCell() {

timerRun = new javax.swing.Timer(10, UpdateTableCell());

timerRun.setRepeats(false);

timerRun.start();

}

private Action UpdateTableCell() {

return new AbstractAction("Update Table Cell") {

private static final long serialVersionUID = 1L;

@Override

public void actionPerformed(ActionEvent e) {

double dbl = ((Double) table.getModel().getValueAt(0, 1))

- ((Integer) table.getModel().getValueAt(0, 2));

table.getModel().setValueAt(dbl, 0, 3);

}

};

}

@Override

public void run() {

while (runProcess) {

try {

Thread.sleep(250);

} catch (Exception e) {

e.printStackTrace();

}

changeTableValues();

}

}

private void changeTableValues() {

Runnable doRun = new Runnable() {

@Override

public void run() {

table.getModel().setValueAt(random.nextInt(128) + random.nextDouble(), 0, 1);

table.getModel().setValueAt(random.nextInt(256) + random.nextDouble(), 1, 1);

table.getModel().setValueAt(random.nextInt(512) + random.nextDouble(), 2, 1);

table.getModel().setValueAt(random.nextInt(128), 0, 2);

table.getModel().setValueAt(random.nextInt(128), 1, 2);

table.getModel().setValueAt(random.nextInt(128), 2, 2);

}

};

SwingUtilities.invokeLater(doRun);

}

private class MyTask extends SwingWorker {

private static final String UPDATE_TABLE_COLUMN = "update";

private String namePr;

private double dbl;

MyTask(String str) {

this.namePr = str;

}

@Override

protected Void doInBackground() throws Exception {

dbl = ((Double) table.getModel().getValueAt(1, 1))

- ((Integer) table.getModel().getValueAt(1, 2));

return null;

}

@Override

protected void done() {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

table.getModel().setValueAt(dbl, 1, 3);

}

});

}

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

ChangeNotifiersOnEvent frame = new ChangeNotifiersOnEvent();

frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

frame.setLocation(150, 150);

frame.pack();

frame.setVisible(true);

}

});

}

}

.

注意

>需要为getColumnClass to Integer, Long or Double设置适当的值

>正确的方法是仅使用AbstractTableModel(最简单的方法是覆盖DefaultTableModel中的此事件),在那里覆盖getValueAt(),

>在getValueAt()内仅计算所需列的适当公式

>我将禁用JTable.getTableHeader().setReorderingAllowed(false);否则必须为setModelIndex或在计算之前

最后

以上就是纯情外套为你收集整理的java jtable 获取内容_从java中的jtable单元获取最新值的全部内容,希望文章能够帮你解决java jtable 获取内容_从java中的jtable单元获取最新值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部