デスクトップの時計を微調整するのに数分費やしたとき、助けなしでは解決できないと思われる問題を発見しました... 同様の問題に関するいくつかの投稿を読みましたが、解決策はうまくいきませんでした。
時計 (アクション リスナーとカレンダーを備えた典型的な Java 形式) は問題なく動作します。 意図した微調整: Frame、ContentPane、および Label の背景を透明に設定して、時間/テキストのみが表示されるようにします。
何が起こるか:ラベルの背景が透明の場合 (または、Opaque が true のときに Alpha を設定して十分に不透明になるまで)、下にある以前の表示はそのままで、クリアされません。
これを理解するために、次のコードをまとめました - 時刻と日付のカレンダーなどは除外されています。このコードは、不透明度、呼び出しの配置などを使用して/使用せずに試した多くのバージョンの 1 つにすぎません。
違いを生むのは、アクション リスナーの使用です。アクション リスナーがコメント化または削除されている場合、ラベルの表示は問題ありません。アクション リスナーのコメントを外すと、問題が発生します。
画像を見てください…どんな助けも感謝します…ありがとう!
参考までに-以下:コードはインポートとコメントを除きます...
黒い背景の時計のスクリーンショット
問題のスクリーンショット:
public class Clear extends JFrame {
private JPanel contentPane;
Color ppColor = new Color(255, 255, 0, 0); // r,g,b,a
Color lblColor = new Color(225, 200, 200, 0);
Color lbl2Color = new Color(225, 200, 200, 254);
int delay = 1000;
JLabel lblTime = new JLabel("TESTING");
JLabel lblTime2 = new JLabel("XXXXXX");
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
final Clear frame = new Clear();
frame.setVisible(true);
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Clear() {
setUndecorated(true);
setBackground(ppColor);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(1680, 975, 128, 74);
contentPane = new JPanel();
contentPane.setBackground(ppColor);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
lblTime.setOpaque(true);
lblTime.setBackground(lblColor);
lblTime.setBounds(0, 0, 125, 30);
contentPane.add(lblTime);
lblTime2.setOpaque(true);
lblTime2.setBackground(lbl2Color);
lblTime2.setBounds(0, 33, 125, 16);
contentPane.add(lblTime2);
ActionListener myTaskPerformer = new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
lblTime.setText("Does it");
lblTime2.setText("work? ");
}
};
new Timer(delay, myTaskPerformer).start();
}
}