我使用SwingWorker使用Java Swing API制作进度条。
我有一个扩展SwingWorker的类
class Swinger extends SwingWorker {
private ClassAnalyzer classAnalyzer;
public Swinger(ClassAnalyzer classAnalyzer){
this.classAnalyzer = classAnalyzer;
}
@Override
public Void doInBackground() throws InterruptedException {
try
{
int progress = 0;
while (progress < 100) {
// at this point I make certain elaboration on classAnalyzer
progress++;
//Call the process method to update the GUI
publish(progress);
}
}
catch(InterruptedException e)
{
}
return null;
}
@Override
protected void process(List chunks) {
for (Integer chunk : chunks) {
progressBar.setValue(chunk);
//if the switchtype checkbox is selected then
//change the progressbar to a determined type
//once the progress has reached 50
if (chunk > 49)
{
if (switchType.isEnabled() && switchType.isSelected())
{
progressBar.setStringPainted(true);
}
}
}
}
}
第二节课(我正在写一篇)
public Tester()
{
JFrame guiFrame = new JFrame();
//make sure the program exits when the frame closes
guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
guiFrame.setTitle("Creating a Table Example");
guiFrame.setSize(700,200);
//This will center the JFrame in the middle of the screen
guiFrame.setLocationRelativeTo(null);
goButton = new JButton("Go");
goButton.setActionCommand("Go");
goButton.addActionListener(new ActionListener()
{
//When the button is clicked the SwingWorker class is executed and
//the button is disabled
@Override
public void actionPerformed(ActionEvent event)
{
progressBar.setStringPainted(progressType.isSelected());
ClassAnalyzer c = new ClassAnalyzer();
Swinger task = new Swinger(c);
task.execute();
int methods = c.getNumberOfMethods();
if(methods == 0){
JOptionPane.showMessageDialogo(null, "methods not found");
}
goButton.setEnabled(false);
}
});
}
当我在第二个测试器中启动时,在进度条出现之前会显示消息“找不到方法”,而在以后的情况下我希望出现该消息。该怎么办?
task.execute()
将启动一个背景(从中doInBackground
调用该方法),程序将继续执行。
task.execute()
不是阻塞方法,这是使用它的原因,因此您不要阻塞事件调度线程
您可以SwingWorker
使用PropertyChangeListener
final ClassAnalyzer c = new ClassAnalyzer();
Swinger task = new Swinger(c);
task.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals("state") && evt.getNewValue().equals(SwingWorker.StateValue.DONE)) {
int methods = c.getNumberOfMethods();
if(methods == 0){
JOptionPane.showMessageDialogo(null, "methods not found");
}
}
}
});
task.execute();
我对Java没有太多的经验,并且很难得到一个进度条来工作。我正在使用NetBeans的内置GUI Maker。目前,我的程序从一个目录读取图像到一个图像数组。显然,这需要一点时间,因此我希望一个简单的进度条来更新用户,以了解加载的程度。我已经使用了其中一个拖放进度条组件。 我目前可以获取目录中的文件数,并可以计算加载文件的百分比 文件成功加载到数组中,但进度条只有在加载所有文件后才会更新。我尝试在
问题内容: 我对SwingWorker和Java GUI有疑问。 我有几类,其处理的信息,我们可以给他们打电话,和。此处理可能需要很长时间。 这些都是的子类,但是本身并不是直接调用的(这些类使用继承自的方法。为了使EDT自由绘制进度条,在保持对象层次结构时最好的使用方法是什么?是否具有包装器类,并且有其调用?即使不扩展,它仍然可以按我期望的那样工作吗? 编辑:澄清我的问题,即使他们已经是子类,我如
问题内容: 我一直在尝试了解如何添加进度条,我可以在正在实现的GUI中创建一个进度条,并使其显示出来,即使在通过http://docs.oracle.com/javase/tutorial/uiswing/components检查之后/progress.html对于如何将方法设置为任务,以便可以创建用于运行方法的进度栏,我仍然不清楚。请有人可以尝试向我解释这一点,还是可以发布一个示例,该示例在GU
问题内容: 我是Java的新手,我看了一些有关SwingWorker的教程。但是,我不确定如何使用在上一个问题中给出的示例代码来实现它。 任何人都可以就我的代码片段解释如何使用SwingWorker和/或将我引向一个不错的教程吗?我已经看过了,但不确定自己是否了解。 问题答案: 通常,用于在中执行长时间运行的任务。 在事件调度线程(EDT)上运行长时间运行的任务可能会导致GUI锁定,因此要做的一件
我试图为在GUI运行之前下载信息的应用程序编写一个进度条。因为下载和组织信息的过程非常漫长,所以我想通知用户进展情况。我决定在游戏后期使用进度条,因此,大部分代码都是编写的,我正在尝试将进度条合并到代码中,而无需对代码进行剧烈的重新操作。以下是进度条的代码。目前,一切运行完毕,GUI弹出后,进度条就会出现。 该程序最初调用GUI应用程序,然后运行数据库获取代码,如下所示。 swing worker
问题内容: 当我尝试通过在Java的Jbutton中转到其属性然后添加图标来添加背景时,它会设置按钮的背景,但是我在按钮上编写的文本会向右移动(在按钮区域之外)。解决方案? 问题答案: 据我了解,您不是在设置背景,而是在此将Icon设置为button。这就是为什么您在右侧看到“图像”而在左侧看到文本的原因。要将图像作为背景添加到按钮,您需要覆盖方法并在其中绘制图像。