gpt4 book ai didi

Java - 更新窗口覆盖

转载 作者:行者123 更新时间:2023-12-01 11:04:51 25 4
gpt4 key购买 nike

我想创建一个覆盖桌面并显示当前系统时间的透明窗口。我一直在尝试使用以下代码:

Window w=new Window(null)
{
public void paint(Graphics g)
{
...
}
};
w.setAlwaysOnTop(true);
w.setBounds(w.getGraphicsConfiguration().getBounds());
w.setBackground(new Color(0, true));
w.setVisible(true);

但是,我无法让 repaint() 工作,因为窗口只更新一次。我不太明白这是如何工作的,也找不到如何在绘制方法之外更新窗口组件。直到 Paint 方法完成后,窗 Eloquent 会显示,然后我就无法再次使用 repaint() 了。我知道我在这里遗漏了一些东西,有人可以帮助我吗?

最佳答案

无需进行自定义绘画。只需将 JLabel 添加到窗口,然后设置带有时间信息的文本即可。

然后你可以使用Swing Timer安排标签的更新。

简单的例子:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;

public class TimerTime extends JPanel implements ActionListener
{
private JLabel timeLabel;
private int count = 0;

public TimerTime()
{
timeLabel = new JLabel( new Date().toString() );
add( timeLabel );

Timer timer = new Timer(1000, this);
timer.setInitialDelay(1);
timer.start();
}

@Override
public void actionPerformed(ActionEvent e)
{
//System.out.println(e.getSource());
timeLabel.setText( new Date().toString() );
// timeLabel.setText( String.valueOf(System.currentTimeMillis() ) );
count++;
System.out.println(count);

if (count == 10)
{
Timer timer = (Timer)e.getSource();
timer.stop();
}
}

private static void createAndShowUI()
{
JFrame frame = new JFrame("TimerTime");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new TimerTime() );
frame.setLocationByPlatform( true );
frame.pack();
frame.setVisible( true );
}

public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}

关于Java - 更新窗口覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33057395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com