在半透明的框架/面板/组件上重新油漆。

在半透明的框架/面板/组件上重新油漆。

我试图在OSX上用Java创建一个半透明窗口,并添加一个JLabel敬它。

这,这个JLabel每一秒都要改变它的文字.。

然而,组件没有很好地重新绘制。

我怎样才能解决这个问题?

我找到了这些 文章但我想不出怎么解决这个问题。

如果可能,请粘贴修复源代码,这是我的:

import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JLabel;import java.awt.Color;import java.awt.Font;
import java.util.Timer;import java.util.TimerTask;public class Translucent {
    public static void main( String [] args ) {

        JFrame frame = new JFrame();

        frame.setBackground( new Color( 0.0f,0.0f,0.0f,0.3f));

        final JLabel label =  new JLabel("Hola");
        label.setFont( new Font( label.getFont().getFamily(), Font.PLAIN, 46 ) );
        label.setForeground( Color.white );

        frame.add( label );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );

        Timer timer = new Timer();
        timer.schedule( new TimerTask(){
            int i = 0;
            public void run() {
                label.setText("Hola "+ i++ );
            }
        }, 0, 1000 );


    }   }


守候你守候我
浏览 476回答 3
3回答

慕娘9325324

问题还可能与设置JLabel来自不是事件分发线程的文本。解决这个问题有两种方法。如果不测试您的问题,我将使用javax.swing.Timer类,而不是java.util.Timer班级,等级。javax.swing.Timer将确保事件在调度线程上触发。所以(未经测试的代码):final ActionListener labelUpdater = new ActionListener() {   private int i;   @Override   public final void actionPerformed(final ActionEvent event) {     label.setText("Hola " + this.i++);   }};final javax.swing.Timer timer = new javax.swing.Timer(1000L, labelUpdater);解决这个问题的另一个方法是继续使用java.util.Timer但要确保你用EventQueue.invokeLater(Runnable)以确保在EDT上对标签进行更新。
打开App,查看更多内容
随时随地看视频慕课网APP