我已经制作了自己的SwingWorker示例,以熟悉它的工作原理.
我想要做的是以下内容:当单击按钮时,我想要一个进度条出现,直到任务完成我想简单地删除进度条并在对话框中添加一个字符串.
单击该按钮时,进度条会出现,但永远不会消失.(10秒后永远不会删除进度条,永远不会放置标签)
这是一个SSCCE:
package swingtesting;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;
public class SwingTesting {
/**
* Creates a frame that will hold a simple button to make use of SwingWorker
*/
public static void main(String[] args) {
// TODO code application logic here
JFrame frame = new JFrame();
JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new GuiWorker().execute();
}
});
button.setText("Test Me");
frame.getContentPane().add(button); …Run Code Online (Sandbox Code Playgroud) 在开始之前,我认为这个问题有一个非常简单的答案,我只是忽略了.我想到了一些关于手头问题的眼睛能够很快指出我的问题.
我有两个我要比较的ArrayLists,并从每个ArrayLists中删除重复项.第一个ArrayList是ArrayList较旧的信息,第二个ArrayList包含新信息.
像这样
ArrayList<Person> contactList = new ArrayList();
contactList.add(new Person("Bob");
contactList.add(new Person("Jake");
contactList.add(new Person("Joe");
ontactList.add(new Person("Rob");
ArrayList<Person> updatedContactList = new ArrayList();
updatedContactList.add(new Person("Bob");
updatedContactList.add(new Person("Jake");
updatedContactList.add(new Person("Joe");
updatedContactList.add(new Person("Phil");
Run Code Online (Sandbox Code Playgroud)
我的Person课很简单,只为这个例子创建
public class Person {
private String name;
public Person(String a_name) {
name = a_name;
}
public String getName() {
return name;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,使用上面的示例,我想删除所有重复项.如果可能的话,我正在尝试将它保留到两个ArrayLists中,但是如果必须的话,我愿意深入克隆其中一个ArrayLists.
因此ArrayList,一旦比较完成,我希望结果中包含以下信息
contactList //removed Person
- Rob
updatedContactList //new Person
- Phil
Run Code Online (Sandbox Code Playgroud)
这是我放在一起的代码
for(int i = 0; …Run Code Online (Sandbox Code Playgroud) 我试图复制这个组件(在帖子的底部),但我似乎无法让它看起来很好看.

所以我想知道,我该如何复制这种渐变涂料?或者,如果它不是渐变涂料,我该怎么做才能得到类似的结果?
与此组件相比,我的尝试变得非常平坦.它还有JFrame选项(关闭,最小化等),它没有组件的"圆润"外观.我正在寻找能够改善我所拥有的东西并解释我哪里出错的人.我知道我可以简单地使用已经制作的外观,但我希望我的示例项目尽可能接近除了文本的图像中的BitDefender GUI.(如果需要,我可以提供代码)
另请注意,我跳过了Background和'Virus Shield','Auto Scan','My BitDefender'面板之间的面板.我这样做主要是因为我想让我的SSCCE尽可能小.
另外我想要注意的是gbc.insets = new Insets(2,10,2,10);,在3上设置insets TopPanels使它看起来更接近BitDefender GUI的间距.(我现在没有时间上传图片.所以我按原样保留了代码,但我确实知道它可以更新到上面的插图中.

编辑 - 更新了更多来源
这是我的代码/ SSCCE(它是3个单独的类,但我将它们合并为一个.java)
package testgui;
import java.awt.*;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TestGui {
public TestGui() {
JFrame frame = new JFrame();
MidPanel midPanel = new MidPanel();
TopPanel topPanel1 = new TopPanel();
TopPanel topPanel2 = new TopPanel();
TopPanel topPanel3 = new TopPanel();
JLabel appName = new JLabel("MyApplication");
JLabel verNum = new JLabel("version 1.0");
Font verFont = …Run Code Online (Sandbox Code Playgroud) 我目前有3个信息数组,不知道如何根据其中一个值对它们进行排序:
int[] rank = { 1, 3, 4, 2, 5 };
String[] game = { "Snake", "Mines", "Fragged", "Siege", "Tower" };
int[] year = { 1980, 1983, 1981, 1995, 1992 };
Run Code Online (Sandbox Code Playgroud)
我想按排名对它进行排序,我已经看到很多人使用比较器对2个并行数组进行排序的例子,但是我没有看到任何排序超过2的例子.
我的第一个想法是为每个创建一个带有变量的类,然后对该对象进行排序,但是对于排序来说真的是一个额外的类吗?
如果我读到一个文件,直到它到达一个空行并且想要在读取完成时创建一个稍微准确的JProgressBar,我该怎么做?
我想问的原因是因为某些文件内读取200ms其中为其他人之间取2500ms和10000ms.
我正在做一些简单的阅读文件
boolean completed
while(!completed) {
//read file
if(reader == null) {
completed = false;
}
}
Run Code Online (Sandbox Code Playgroud)
那么有没有办法让进度条准确适用于这样的情况?(顺便说一下,文件的大小并不一定意味着在这种情况下读取所需的时间更少)
我目前正在开发一个个人项目,如果应用程序第一次运行,我想通过教程引导新用户.我不太确定如何做到这一点,谷歌的结果没有发现任何东西(至少不是外行搜索术语).
这是我第一次处理这种情况,但我认为这样做的正确方法是使用某种布尔值和属性文件.
有人可以对此有所了解或告诉我谷歌需要什么条款,所以我可以阅读它.
编辑
Jeeze,从来不知道有这么多人会贬低一个我不太了解的合法问题.我甚至没有要求直接回答,即使搜索条件很好,只要我知道要搜索什么...
我有一个Gui,它允许用户单击一个按钮并查看文本文件的内容.问题是文件可能相当大(100,000多行数据),并且在表中读取和显示可能需要15秒以上.
文本文件格式的示例:
*/
Account ID : 8 digit number
Money Charged : Integer < $10
Values separated by \t
/*
Account Id Money Charged
---------- --------------
731298 3
359412 5
624937 1
Run Code Online (Sandbox Code Playgroud)
因此,当单击该按钮时,它会读取每一行并将每个ID放入一个地图中并增加帐户的费用.
完成后,它会将一个JTable放在一个带有信息的JDialog中.但是,只要单击该按钮,用户可能会对程序正在执行的操作感到困惑,因为在JDialog和JTable出现之前我已经经历了超过10-15秒的延迟.
那么有没有办法让JDialog显示一个字符串,让用户知道它正在创建表?(我认为它会使用的方法的JDialog如一个完成repaint()或validate但这些似乎并没有这样的伎俩.
这是我认为应该完成的顺序:
//Psuedo-code
actionPerformed {
create frame
display label that lets user know its creating table
read text file
create map and place values
remove label
update dialog with table // unsure what to do to update it properly
}
Run Code Online (Sandbox Code Playgroud)
所以我的整体问题很简单: 是否可以告知用户它当前正在计算数据(通过JDialog中的JLabel),一旦读取数据,就显示JTable(通过更新JDialog)? …
java ×7
swing ×3
jdialog ×2
arraylist ×1
collections ×1
comparison ×1
gradient ×1
graphics ×1
jprogressbar ×1
repaint ×1
sorting ×1
swingworker ×1