小编Wil*_*ner的帖子

如何让我的SwingWorker示例正常工作?

我已经制作了自己的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)

java swing jdialog swingworker

16
推荐指数
2
解决办法
1万
查看次数

如何从两个单独的ArrayLists中删除重复的对象?

在开始之前,我认为这个问题有一个非常简单的答案,我只是忽略了.我想到了一些关于手头问题的眼睛能够很快指出我的问题.

我有两个我要比较的ArrayLists,并从每个ArrayLists中删除重复项.第一个ArrayListArrayList较旧的信息,第二个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)

java comparison arraylist

7
推荐指数
1
解决办法
1万
查看次数

使用渐变绘画复制此组件需要做什么?

我试图复制这个组件(在帖子的底部),但我似乎无法让它看起来很好看.

在此输入图像描述

所以我想知道,我该如何复制这种渐变涂料?或者,如果它不是渐变涂料,我该怎么做才能得到类似的结果?

与此组件相比,我的尝试变得非常平坦.它还有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)

java graphics swing gradient paintcomponent

6
推荐指数
1
解决办法
556
查看次数

如何排序3个并行数组?

我目前有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的例子.

我的第一个想法是为每个创建一个带有变量的类,然后对该对象进行排序,但是对于排序来说真的是一个额外的类吗?

java sorting collections

4
推荐指数
1
解决办法
572
查看次数

如何为长度未知的任务创建准确的进度条?

如果我读到一个文件,直到它到达一个空行并且想要在读取完成时创建一个稍微准确的JProgressBar,我该怎么做?

我想问的原因是因为某些文件内读取200ms其中为其他人之间取2500ms10000ms.

我正在做一些简单的阅读文件

boolean completed

while(!completed) {
    //read file
    if(reader == null) {
        completed = false;
    } 
}
Run Code Online (Sandbox Code Playgroud)

那么有没有办法让进度条准确适用于这样的情况?(顺便说一下,文件的大小并不一定意味着在这种情况下读取所需的时间更少)

java jprogressbar

3
推荐指数
1
解决办法
1299
查看次数

如何判断我的应用程序是否第一次运行?

我目前正在开发一个个人项目,如果应用程序第一次运行,我想通过教程引导新用户.我不太确定如何做到这一点,谷歌的结果没有发现任何东西(至少不是外行搜索术语).

这是我第一次处理这种情况,但我认为这样做的正确方法是使用某种布尔值和属性文件.

有人可以对此有所了解或告诉我谷歌需要什么条款,所以我可以阅读它.

编辑

Jeeze,从来不知道有这么多人会贬低一个我不太了解的合法问题.我甚至没有要求直接回答,即使搜索条件很好,只要我知道要搜索什么...

java

2
推荐指数
1
解决办法
132
查看次数

如何使用新信息更新JDialog?

我有一个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 swing jdialog repaint

1
推荐指数
1
解决办法
3195
查看次数