Я создал часы и хочу сделать фон прозрачным - PullRequest
0 голосов
/ 02 августа 2020

Я пытался записать часы в Java.

Вот пример моего кода.

  1. Я хочу сделать фон прозрачным, но не знаю как.
  2. Я хочу поставить свою программу поверх всех Windows. Пример того, как это должно выглядеть: example how that must look.

There are two classes in my program. First of the called clock and second is Executor screen:
экран .

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 Ответ

0 голосов
/ 02 августа 2020

Сразу после создания JPanel добавьте следующее:

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

Но если рамка не декорирована, вы не сможете закрыть ее, поэтому вам может потребоваться добавить дополнительный код в ваша панель. A mouseListener будет работать.

Создайте внутренний класс

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

Затем

panel.addMouseListener(new MyMouseListener());

Когда вы нажмете на время, программа выйдет из программы.

Примечание: расширять JFrame не следует. Лучше всего создать экземпляр и использовать его. Правило таково: предпочитайте composition over inheritance, когда это имеет смысл.

...