- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
已解决并编辑了工作版本,并留下,以防对其他人有帮助
此 jTable 的行是从 2D 字符串数组填充的。该数组将是动态的。我只需要显示 10 行 3 秒,然后显示另外 10 行 3 秒,重复此循环直到数组结束,然后重新填充数组并再次开始循环。
我找不到任何 jTables 使用时间延迟来更新表而不是按钮、数据更改等的示例
编辑 - 修复了要使用计时器 ActionListener 显示的行
要显示的行也将从 jSpinner 中选择,但是如何实现设置的行而不是显示所有行? jScrollPane 中禁用垂直和水平滚动。
编辑 - 在第一次显示数组 1 中的所有记录后,我仍然困惑于如何“重新填充”并显示新记录。用另一个计时器/ActionListener 解决了问题新的默认表模型
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class DataTable2 {
String [][] data; //2D Array (MultiDimensional) for Records.
String [] titles; //Array for ColumnTitles
JTable table;
DefaultTableModel model;
JScrollPane pane;
JFrame frame;
JPanel panel;
public DataTable2(int rows, int radio){
//Fill Arrays.
titles = setTitles2(radio);
data = fill2();
//Timer Variables.
final int SPEED = 4000;//3.5 sec delay for displaying number of rows on screen.
int pause = 1000;
//Row Variable
final int R=rows;//For Timer ActionListener.
//Components
frame = new JFrame("Live Table");
panel = new JPanel();
model = new DefaultTableModel(data, titles);
table = new JTable(model){
@Override
public boolean isCellEditable(int rowIndex, int colIndex){
return false;
}};
pane = new JScrollPane(table, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
//Table Formatting...More Done but not shown in example to keep shorter.
table.setRowHeight(100);
table.setFont(new Font("Arial", Font.BOLD,24));
table.getTableHeader().setFont(new Font("Arial", Font.BOLD, 24));
//Modified Code derived from FixedRowsTable <http://stackoverflow.com/questions/6175139/jtable-row-limitation> by @Andrew Thompson
//To show set number of rows of the table at a time. eg. 10 rows, timer, 10 rows, timer etc......
Dimension d = table.getPreferredSize();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
pane.setPreferredSize(new Dimension(screenSize.width-50, table.getRowHeight()*rows));
//Set as constants to be accessed by both ActionListeners.
final int HEIGHT = table.getRowHeight()*(R);
final JScrollBar BAR = pane.getVerticalScrollBar();
//Listener for Timer.
ActionListener perform = new ActionListener(){
@Override
public void actionPerformed(ActionEvent ae) {
BAR.setValue(BAR.getValue()+HEIGHT);
}
};
//Listener for Timer 2.
ActionListener update = new ActionListener(){
@Override
public void actionPerformed(ActionEvent ae){
BAR.setValue(0);//Reset Row Height.
DefaultTableModel model = new DefaultTableModel(data, titles);
table.setModel(model);
}
};
//Timer.
Timer timer = new Timer(SPEED, perform);
timer.setRepeats(true);
timer.start();
//Timer 2.
double val = table.getRowCount();///R;
int time = 0;
//Formula to compensate for SwingTimer accepting only Integer Values.
if(val%R!=0){
time=SPEED;
}
time+= (table.getRowCount()/R)*SPEED;
//Timer 2
Timer timer2 = new Timer(time, update);
timer2.setRepeats(true);
timer2.start();
//Debug
System.out.println(time);
System.out.println(val);
System.out.println(val%R);
//Set Panel to Full Screen
panel.setPreferredSize(new Dimension (screenSize.width,screenSize.height));
//Add Components.
frame.add(panel);
panel.add(pane);
//Frame Close Operation.
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//Table Constraints.
table.getTableHeader().setReorderingAllowed(false);
table.getTableHeader().setResizingAllowed(true);
table.setShowVerticalLines(false);
table.setShowHorizontalLines(true);
//Apply Model to Table
table.setModel(model);
//Add table to scroll pane.
pane.setViewportView(table);
//Finish Frame
frame.pack();
frame.setLocationByPlatform(false);
frame.setVisible(true);
}
/**
* Method to fill table with String values for testing outside of network.
* @return String array of Records.
*/
private String[][] fill2(){
String[][] temp = {{"Record1", "Record2", "Record3", "Record4", "Record5", "Record6"},
{"Record7", "Record8", "Record9", "Record10", "Record11", "Record12"},
{"Record13", "Record14", "Record15", "Record16", "Record17", "Record18"},
{"Record19", "Record20", "Record21", "Record22", "Record23", "Record24"},
{"Record25", "Record26", "Record27", "Record28", "Record29", "Record30"},
{"Record31", "Record32", "Record33", "Record34", "Record35", "Record36"},
{"Record37", "Record38", "Record39", "Record40", "Record41", "Record42"},
{"Record43", "Record44", "Record45", "Record46", "Record47", "Record48"},
{"Record49", "Record50", "Record51", "Record52", "Record53", "Record54"},
{"Record55", "Record56", "Record57", "Record58", "Record59", "Record60"},
{"Record61", "Record62", "Record63", "Record64", "Record65", "Record66"},
{"Record67", "Record68", "Record69", "Record70", "Record71", "Record72"},
{"Record73", "Record74", "Record75", "Record76", "Record77", "Record78"},
};
return temp;
}
/**
* Method to fill String array of column titles.
* @param rad jRadioButton value from buttonGroup sent from main settings frame.
* @return Column Titles
*/
private String[] setTitles2(int rad){
String[] t;
if(rad==2){
t = new String[]{"TITLE1", "TITLE2"};
}else if(rad==5||rad==10){
t = new String[]{"TITLE1", "TITLE2", "TITLE3", "TITLE4", "TITLE5", "TITLE6", "TITLE7", "TITLE8"};
}else if(rad==6){
t = new String[]{"TITLE1", "TITLE2"};
}else if(rad==7){
t = new String[]{"TITLE1"};
}else if(rad==8||rad==9){
t = new String[]{"TITLE1", "TITLE2", "TITLE3", "TITLE4", "TITLE5"};
}else{
t=new String []{"TITLE1", "TITLE2", "TITLE3", "TITLE4", "TITLE5", "TITLE6"};
}
return t;
}
//Main sample just to show table.
public static void main(String[] args) {
//Sample Value for Example.
int x = 10; //Any Value from 1-10 will be used. 5 or 10 will be used most reguarly.
int y = 1; //Any Value from 1-9 will be used. 1 will be used most reguarly.
//Call Table.
DataTable2 table = new DataTable2(x,y);
}
}
最佳答案
只需使用 javax.swing.Timer ,并在其 actionPerformed()
方法中,获取要显示的接下来 10 行,并用接下来的 10 行替换表格模型中的行。
关于java - 需要 jTable 在时间延迟后显示 10 行,然后在所有显示后加载新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17492525/
我正在尝试用 C 语言编写一个使用 gstreamer 的 GTK+ 应用程序。 GTK+ 需要 gtk_main() 来执行。 gstreamer 需要 g_main_loop_run() 来执行。
我已经使用 apt-get 安装了 opencv。我得到了以下版本的opencv2,它工作正常: rover@rover_pi:/usr/lib/arm-linux-gnueabihf $ pytho
我有一个看起来像这样的 View 层次结构(基于其他答案和 Apple 的使用 UIScrollView 的高级 AutoLayout 指南): ScrollView 所需的2 个步骤是: 为 Scr
我尝试安装 udev。 udev 在 ./configure 期间给我一个错误 --exists: command not found configure: error: pkg-config and
我正在使用 SQLite 3。我有一个表,forums,有 150 行,还有一个表,posts,有大约 440 万行。每个帖子都属于一个论坛。 我想从每个论坛中选择最新帖子的时间戳。如果我使用 SEL
使用 go 和以下包: github.com/julienschmidt/httprouter github.com/shwoodard/jsonapi gopkg.in/mgo.v2/bson
The database仅包含 2 个表: 钱包(100 万行) 事务(1500 万行) CockroachDB 19.2.6 在 3 台 Ubuntu 机器上运行 每个 2vCPU 每个 8GB R
我很难理解为什么在下面的代码中直接调用 std::swap() 会导致编译错误,而使用 std::iter_swap 编译却没有任何错误. 来自 iter_swap() versus swap() -
我有一个非常简单的 SELECT *用 WHERE NOT EXISTS 查询条款。 SELECT * FROM "BMAN_TP3"."TT_SPLDR_55E63A28_59358" SELECT
我试图按部分组织我的 .css 文件,我需要从任何文件访问文件组中的任何类。在 Less 中,我可以毫无问题地创建一个包含所有文件导入的主文件,并且每个文件都导入主文件,但在 Sass 中,我收到一个
Microsoft.AspNet.SignalR.Redis 和 StackExchange.Redis.Extensions.Core 在同一个项目中使用。前者需要StackExchange.Red
这个问题在这里已经有了答案: Updating from Rails 4.0 to 4.1 gives sass-rails railties version conflicts (4 个答案) 关
我们有一些使用 Azure DevOps 发布管道部署到的现场服务器。我们已经使用这些发布管道几个月了,没有出现任何问题。今天,我们在下载该项目的工件时开始出现身份验证错误。 部署组中的节点显示在线,
Tip: instead of creating indexes here, run queries in your code – if you're missing any indexes, you
你能解释一下 Elm 下一个声明中的意思吗? (=>) = (,) 我在 Elm architecture tutorial 的例子中找到了它 最佳答案 这是中缀符号。实际上,这定义了一个函数 (=>
我需要一个 .NET 程序集查看器,它可以显示低级详细信息,例如元数据表内容等。 最佳答案 ildasm 是 IL 反汇编程序,具有低级托管元数据 token 信息。安装 Visual Studio
我有两个列表要在 Excel 中进行比较。这是一个很长的列表,我需要一个 excel 函数或 vba 代码来执行此操作。我已经没有想法了,因此转向你: **Old List** A
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
我正在学习 xml 和 xml 处理。我无法很好地理解命名空间的存在。 我了解到命名空间帮助我们在 xml 中分离相同命名的元素。我们不能通过具有相同名称的属性来区分元素吗?为什么命名空间很重要或需要
我搜索了 Azure 文档、各种社区论坛和 google,但没有找到关于需要在公司防火墙上打开哪些端口以允许 Azure 所有组件(blob、sql、compute、bus、publish)的简洁声明
我是一名优秀的程序员,十分优秀!