【问题标题】:How can i Create Color simulation with JFrame, JLabel, using setForeground?如何使用 JFrame、JLabel、setForeground 创建颜色模拟?
【发布时间】:2015-05-14 22:52:41
【问题描述】:

我真的怀疑这是最好的方法,但这是我目前正在使用的方法。我在 JPanel 中有这 3 个 JLabel 对象。所以 3 个圆圈在字体 99 的 JPanel 中。从左到右的圆圈颜色为 R B G。\u2022 是一个圆圈。

终局目标:能够将圆圈从开启变为关闭。所以说默认开始是白色的。我希望能够做到 |R W W|或|W B G|。但我遇到的问题是,我希望用户能够看到颜色的开启和关闭,这就是重点。我尝试了等待,但它只是冻结了程序,然后它产生了颜色,没有过渡。我知道它会立即改变,但我想暂停它几毫秒或半秒,以便用户可以看到它们的开启和关闭。

示例:第二个 1 次通过,|R W W|第二个 2 |W W W|秒 3 |R B W|秒 4 |W W W| second 5 |R W G|....等

    ballR = new JLabel("\u2022");
    panel.add(ballR);
    ballR.setForeground(Color.RED);
    ballR.setFont(new Font("Tahoma", Font.PLAIN, 99));

^^我每种颜色都有一个,红蓝绿^^

    private void colorRed(){

    ballR.setForeground(Color.RED);

    try {
        TimeUnit.SECONDS.sleep((1);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    ballR.setForeground(Color.WHITE);

}

【问题讨论】:

    标签: java swing animation colors jframe


    【解决方案1】:

    我尝试了等待,但它只是冻结了程序,然后它产生了颜色,没有过渡

    不清楚您是否在 EDT 上调用此代码,但从描述听起来是这样 - 在 EDT 上休眠(或执行长时间运行的任务)使用将阻止任何重绘或侦听器触发,直到该方法返回(换句话说,UI 锁定)。

    但我想暂停它几毫秒或半秒,以便用户可以看到它们打开和关闭。

    如果您希望在指定时间(或重复的时间间隔)后在 EDT 上执行任务,请使用 Timer

    Timer timer = new Timer(500, new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
            ballR.setForeground(Color.WHITE);//or RED, depending
        }
    });
    timer.setRepeats(false);//don't repeat if you don't want to
    timer.start();
    

    【讨论】:

    • 根据 OP 提供的示例,我猜他们想要循环 5 次(超过 5 秒),所以你应该有一个重复计时器或SwingWorker
    • 只要程序完成,我想循环尽可能多的循环。所以只要 x,对于 x 个变量。
    • 我对计时器有点困惑。我有一种方法可以在代码的最后将颜色改回白色,但它只是保持相同的颜色,完成后不会变为白色。如果您能深入解释一下,我将不胜感激,但我一直在努力。
    猜你喜欢
    • 2019-08-11
    • 2012-03-18
    • 1970-01-01
    • 2023-03-11
    • 2019-06-15
    • 2021-05-05
    • 2023-03-28
    • 2021-12-26
    • 1970-01-01
    相关资源
    最近更新 更多