【问题标题】:I created clocks and I want to make the background transparent我创建了时钟,我想让背景透明
【发布时间】:2020-11-22 17:31:18
【问题描述】:

我尝试用 Java 编写时钟。

这是我的代码示例。

  1. 我想让背景透明,但不知道怎么做。
  2. 我想将我的程序放在所有 Windows 之上。外观示例:
    .

我的程序中有两个类。第一个被调用的时钟,第二个是 Executor 屏幕:
.

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


public class clock extends JFrame 
{
    private static final long serialVersionUID = 1L;
    JLabel timeF;
    JPanel panel;
    
    
    public clock()
    {
            super("Java Clock by Anton" );
            setSize (400,90);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
            setResizable(true);
            setLocationRelativeTo(null);
            
            panel = new JPanel();
            panel.setLayout(new FlowLayout());
            panel.setOpaque(false);
            timeF = new JLabel("0:0:0");
            timeF.setFont(new Font("Arial",Font.PLAIN,48));
            
            panel.add(timeF);
            add(panel);
            
            Timer t = new Timer(1000,new Listener());
            t.start();
    }       
        
    
    class Listener implements ActionListener
    {
    
        public void actionPerformed(ActionEvent e)
    
        {
    
            Calendar rightNow = Calendar.getInstance();
            
            int hour = rightNow.get(Calendar.HOUR_OF_DAY);
            int min = rightNow.get(Calendar.MINUTE);
            int sec = rightNow.get(Calendar.SECOND);
            
            timeF.setText(hour + ":" + min + ":" + sec);
            
        }
    }
} 

【问题讨论】:

  • 1) 类名应以大写字符开头。所有的 JDK 类都遵循这个标准。以身作则。 2) 在框架可见之前,应将 Swing 组件添加到框架中。 3) 使用 pack() 代替 setSize()。您可以将EmptyBorder 添加到您的JLabel 以在文本周围留出额外的空间。 4)不需要面板。您可以将标签直接添加到框架中。

标签: java eclipse user-interface background clock


【解决方案1】:

在创建 JPanel 之后,添加以下内容:

setUndecorated(true);
setVisible(true);
// has the alpha parameter set to transparent.
setBackground(new  Color(255,0,0,0));
panel.setOpaque(false);

但是一旦 Frame 未装饰,您将无法关闭它,因此您可能需要在面板中添加一些额外的代码。 mouseListener 将起作用。

创建一个内部类

class MyMouseListener extends MouseAdapter {
     public void mouseClicked(MouseEvent a) {
         System.exit(-1);
     }
}

然后

panel.addMouseListener(new MyMouseListener());

当你点击的时候,它会退出程序。

注意:您不应该扩展JFrame。最好创建一个实例并使用它。规则是,在有意义的情况下首选composition over inheritance

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    相关资源
    最近更新 更多