回答編集履歴

8

追記

2023/09/10 06:29

投稿

jimbe
jimbe

スコア13318

test CHANGED
@@ -107,6 +107,8 @@
107
107
  質問は JLayeredPane ですので以下は余談となりますが。
108
108
  ただ二つを重ねるだけであれば、 TN8001 さん回答の注意として書かれている「先に追加したものが**上**になります」が有効(?)に使えます。
109
109
  この Z オーダーの動作はレイアウトマネージャの設定 (null かどうか ) には関係ありません。
110
+ レイアウトマネージャは各コンポーネントの X, Y, Width, Height を管理して **重ならないような** 配置をするのが主な役割だからで、重ならせる為にレイアウトマネージャを null にするという方法があるだけです。
111
+ (一部のレイアウトマネージャは重ならせることが出来ます。 GridBagLayout がその 1 つです。)
110
112
  ですから回答コードの 27~38行目を以下のようにすることで、 JLayeredPane を使わなくても (JPanel で ) 重ねられます。
111
113
  (timeLabel の add と backgroundLabel の add が回答コードと入れ替わっているので注意.)
112
114
  ```java

7

追加

2023/09/09 15:35

投稿

jimbe
jimbe

スコア13318

test CHANGED
@@ -103,3 +103,24 @@
103
103
  }
104
104
  ```
105
105
  ![実行](https://ddjkaamml8q8x.cloudfront.net/questions/2023-09-08/5b38202c-075c-484d-bcc7-1753a55a88d0.png)
106
+ ---
107
+ 質問は JLayeredPane ですので以下は余談となりますが。
108
+ ただ二つを重ねるだけであれば、 TN8001 さん回答の注意として書かれている「先に追加したものが**上**になります」が有効(?)に使えます。
109
+ この Z オーダーの動作はレイアウトマネージャの設定 (null かどうか ) には関係ありません。
110
+ ですから回答コードの 27~38行目を以下のようにすることで、 JLayeredPane を使わなくても (JPanel で ) 重ねられます。
111
+ (timeLabel の add と backgroundLabel の add が回答コードと入れ替わっているので注意.)
112
+ ```java
113
+ //JLayeredPane layerPane = new JLayeredPane(); //★コメント化
114
+ //layerPane.setLayout(new GridBagLayout()); //★コメント化
115
+ JPanel layerPane = new JPanel(new GridBagLayout()); //☆追加
116
+
117
+ GridBagConstraints gbc = new GridBagConstraints();
118
+ gbc.gridx = 0;
119
+ gbc.gridy = 0;
120
+
121
+ layerPane.add(timeLabel, gbc); //☆ 上になるものを先に add する
122
+ //layerPane.setLayer(timeLabel, JLayeredPane.DEFAULT_LAYER + 1); //★コメント化
123
+
124
+ layerPane.add(backgroundLabel, gbc); //☆ 下になるものを後に add する
125
+ //layerPane.setLayer(backgroundLabel, JLayeredPane.DEFAULT_LAYER); //★コメント化
126
+ ```

6

時計追加

2023/09/07 19:19

投稿

jimbe
jimbe

スコア13318

test CHANGED
@@ -46,3 +46,60 @@
46
46
  メソッド名は動詞+名詞で小文字始まり、意味が分からなくなる程の過度の省略はしないほうが良いです。
47
47
  `String GP() { ~ }` → `String getPath() { ~ }`
48
48
  強制ではありませんが、開発ツールによっては注意されたり、他人に見せる際に違和感を持たれてそれがコードを読む邪魔になったりします。
49
+
50
+ ---
51
+
52
+ 時計です。
53
+ ```java
54
+ import java.awt.*;
55
+ import java.text.SimpleDateFormat;
56
+ import java.util.Date;
57
+ import java.util.concurrent.*;
58
+
59
+ import javax.swing.*;
60
+
61
+ public class MainFrame extends JFrame {
62
+ public static void main(String[] args) {
63
+ SwingUtilities.invokeLater(() -> new MainFrame().setVisible(true));
64
+ }
65
+
66
+ MainFrame() {
67
+ super("test");
68
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
69
+
70
+ String filename = "C:\\Users\\Jimbe\\Desktop\\艦これ画像\\Tuscaloosa.png";
71
+ //String filename = "C:\\Users\\yuu19\\Downloads\\eclipce\\workspace\\pokecchi\\image\\ぽけっち.png";
72
+ Image image = Toolkit.getDefaultToolkit().createImage(filename); //.getScaledInstance(500, 450, Image.SCALE_DEFAULT);
73
+ JLabel backgroundLabel = new JLabel(new ImageIcon(image));
74
+
75
+ JLabel timeLabel = new JLabel("00:00:00");
76
+ timeLabel.setOpaque(false);
77
+ timeLabel.setFont(timeLabel.getFont().deriveFont(100f));
78
+ timeLabel.setForeground(Color.GREEN);
79
+
80
+ JLayeredPane layerPane = new JLayeredPane();
81
+ layerPane.setLayout(new GridBagLayout());
82
+
83
+ GridBagConstraints gbc = new GridBagConstraints();
84
+ gbc.gridx = 0;
85
+ gbc.gridy = 0;
86
+
87
+ layerPane.add(backgroundLabel, gbc);
88
+ layerPane.setLayer(backgroundLabel, JLayeredPane.DEFAULT_LAYER);
89
+
90
+ layerPane.add(timeLabel, gbc);
91
+ layerPane.setLayer(timeLabel, JLayeredPane.DEFAULT_LAYER + 1);
92
+
93
+ setContentPane(layerPane);
94
+ pack();
95
+ setLocationRelativeTo(null);
96
+
97
+ SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
98
+ ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
99
+ executor.scheduleAtFixedRate(() -> {
100
+ SwingUtilities.invokeLater(() -> timeLabel.setText(formatter.format(new Date())));
101
+ }, 0L, 1L, TimeUnit.SECONDS); //1秒毎に実行
102
+ }
103
+ }
104
+ ```
105
+ ![実行](https://ddjkaamml8q8x.cloudfront.net/questions/2023-09-08/5b38202c-075c-484d-bcc7-1753a55a88d0.png)

5

追記

2023/09/07 08:50

投稿

jimbe
jimbe

スコア13318

test CHANGED
@@ -37,6 +37,7 @@
37
37
  ![実行結果](https://ddjkaamml8q8x.cloudfront.net/questions/2023-09-07/4413f8d7-9d1f-4c57-a26e-a6519005fcf7.png)
38
38
 
39
39
  getLayeredPane で得られるオブジェクトは Swing 自身がダイアログ等を管理する為に使っているものでしょうから、アプリで特別に必要で無ければ直接使うのは避けたほうが良いと思います。
40
+ またその JLayeredPane は ContentPane の外に有りますので、それだけで作ると ContentPane が空ということになり、 JFrame が最小になります。
40
41
 
41
42
  全く関係ありませんが、 java の命名規則等は知っておいたほうが良いと思います。
42
43
  java ではクラス名は大文字で始め、変数名は小文字で始めることが推奨です。

4

修正

2023/09/07 08:08

投稿

jimbe
jimbe

スコア13318

test CHANGED
@@ -36,7 +36,7 @@
36
36
  ```
37
37
  ![実行結果](https://ddjkaamml8q8x.cloudfront.net/questions/2023-09-07/4413f8d7-9d1f-4c57-a26e-a6519005fcf7.png)
38
38
 
39
- getLayer で得られるオブジェクトは Swing 自身がダイアログ等を管理する為に使っているものでしょうから、アプリで特別に必要で無ければ直接使うのは避けたほうが良いと思います。
39
+ getLayeredPane で得られるオブジェクトは Swing 自身がダイアログ等を管理する為に使っているものでしょうから、アプリで特別に必要で無ければ直接使うのは避けたほうが良いと思います。
40
40
 
41
41
  全く関係ありませんが、 java の命名規則等は知っておいたほうが良いと思います。
42
42
  java ではクラス名は大文字で始め、変数名は小文字で始めることが推奨です。

3

マークダウン修正

2023/09/07 04:48

投稿

jimbe
jimbe

スコア13318

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  全く関係ありませんが、 java の命名規則等は知っておいたほうが良いと思います。
42
42
  java ではクラス名は大文字で始め、変数名は小文字で始めることが推奨です。
43
- `class windows` → 'class Window2'
43
+ `class windows` → `class Window2`
44
44
  `window2 W = ~` → `Window2 w = ~`
45
45
  メソッド名は動詞+名詞で小文字始まり、意味が分からなくなる程の過度の省略はしないほうが良いです。
46
46
  `String GP() { ~ }` → `String getPath() { ~ }`

2

追記

2023/09/07 04:47

投稿

jimbe
jimbe

スコア13318

test CHANGED
@@ -35,3 +35,13 @@
35
35
  }
36
36
  ```
37
37
  ![実行結果](https://ddjkaamml8q8x.cloudfront.net/questions/2023-09-07/4413f8d7-9d1f-4c57-a26e-a6519005fcf7.png)
38
+
39
+ getLayer で得られるオブジェクトは Swing 自身がダイアログ等を管理する為に使っているものでしょうから、アプリで特別に必要で無ければ直接使うのは避けたほうが良いと思います。
40
+
41
+ 全く関係ありませんが、 java の命名規則等は知っておいたほうが良いと思います。
42
+ java ではクラス名は大文字で始め、変数名は小文字で始めることが推奨です。
43
+ `class windows` → 'class Window2'
44
+ `window2 W = ~` → `Window2 w = ~`
45
+ メソッド名は動詞+名詞で小文字始まり、意味が分からなくなる程の過度の省略はしないほうが良いです。
46
+ `String GP() { ~ }` → `String getPath() { ~ }`
47
+ 強制ではありませんが、開発ツールによっては注意されたり、他人に見せる際に違和感を持たれてそれがコードを読む邪魔になったりします。

1

ファイル名追加

2023/09/06 15:21

投稿

jimbe
jimbe

スコア13318

test CHANGED
@@ -1,6 +1,8 @@
1
1
  古いサイトからですが → [レイヤペイン](http://wisdom.sakura.ne.jp/system/java/swing/swing30.html)
2
2
 
3
3
  ↑アプレットをアプリケーションにしたものです↓
4
+
5
+ MainFrame.java
4
6
  ```java
5
7
  import java.util.Random;
6
8