回答編集履歴
8
追記
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
追加
test
CHANGED
@@ -103,3 +103,24 @@
|
|
103
103
|
}
|
104
104
|
```
|
105
105
|

|
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
時計追加
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
|
+

|
5
追記
test
CHANGED
@@ -37,6 +37,7 @@
|
|
37
37
|

|
38
38
|
|
39
39
|
getLayeredPane で得られるオブジェクトは Swing 自身がダイアログ等を管理する為に使っているものでしょうから、アプリで特別に必要で無ければ直接使うのは避けたほうが良いと思います。
|
40
|
+
またその JLayeredPane は ContentPane の外に有りますので、それだけで作ると ContentPane が空ということになり、 JFrame が最小になります。
|
40
41
|
|
41
42
|
全く関係ありませんが、 java の命名規則等は知っておいたほうが良いと思います。
|
42
43
|
java ではクラス名は大文字で始め、変数名は小文字で始めることが推奨です。
|
4
修正
test
CHANGED
@@ -36,7 +36,7 @@
|
|
36
36
|
```
|
37
37
|

|
38
38
|
|
39
|
-
getLayer で得られるオブジェクトは Swing 自身がダイアログ等を管理する為に使っているものでしょうから、アプリで特別に必要で無ければ直接使うのは避けたほうが良いと思います。
|
39
|
+
getLayeredPane で得られるオブジェクトは Swing 自身がダイアログ等を管理する為に使っているものでしょうから、アプリで特別に必要で無ければ直接使うのは避けたほうが良いと思います。
|
40
40
|
|
41
41
|
全く関係ありませんが、 java の命名規則等は知っておいたほうが良いと思います。
|
42
42
|
java ではクラス名は大文字で始め、変数名は小文字で始めることが推奨です。
|
3
マークダウン修正
test
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
|
41
41
|
全く関係ありませんが、 java の命名規則等は知っておいたほうが良いと思います。
|
42
42
|
java ではクラス名は大文字で始め、変数名は小文字で始めることが推奨です。
|
43
|
-
`class windows` →
|
43
|
+
`class windows` → `class Window2`
|
44
44
|
`window2 W = ~` → `Window2 w = ~`
|
45
45
|
メソッド名は動詞+名詞で小文字始まり、意味が分からなくなる程の過度の省略はしないほうが良いです。
|
46
46
|
`String GP() { ~ }` → `String getPath() { ~ }`
|
2
追記
test
CHANGED
@@ -35,3 +35,13 @@
|
|
35
35
|
}
|
36
36
|
```
|
37
37
|

|
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
ファイル名追加
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
|
|