回答編集履歴

1

追加

2019/09/04 05:17

投稿

jimbe
jimbe

スコア12639

test CHANGED
@@ -19,3 +19,141 @@
19
19
  > たとえば、
20
20
 
21
21
  (以下略)
22
+
23
+
24
+
25
+ ----
26
+
27
+
28
+
29
+ 以下で labels の上に label が表示されました.
30
+
31
+ Frame コンストラクタ内での ```setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));``` では, レイアウトマネージャが全てのコンポーネントの配置を司る為に, setLocation が効かず label も並べてしまい, (確認していませんが)描画領域が制限されずに全て横一列に並べた上で中央部分を表示していたものと思われます.
32
+
33
+ また, Window コンストラクタ内の setLayout が有効では(これも原因は確認していませんが)表示がされませんでしたので, コメントにしました.
34
+
35
+
36
+
37
+ Window.java
38
+
39
+ ```java
40
+
41
+ import java.awt.Color;
42
+
43
+
44
+
45
+ import javax.swing.JFrame;
46
+
47
+ import javax.swing.JLabel;
48
+
49
+ import javax.swing.JLayeredPane;
50
+
51
+ import javax.swing.border.LineBorder;
52
+
53
+
54
+
55
+ import que.Movement;
56
+
57
+
58
+
59
+ public class Window extends JFrame {
60
+
61
+
62
+
63
+ private final int rows;
64
+
65
+ private final int columns;
66
+
67
+
68
+
69
+ Window(final int rows, final int columns) {
70
+
71
+ this.rows = rows;
72
+
73
+ this.columns = columns;
74
+
75
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
76
+
77
+ setBounds(500, 150, columns * 80 + 20, rows * 80 + 40);
78
+
79
+ //setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
80
+
81
+
82
+
83
+ Movement mv = new Movement();
84
+
85
+
86
+
87
+ Frame frame = new Frame(rows, columns);
88
+
89
+ add(frame);
90
+
91
+ }
92
+
93
+
94
+
95
+ public class Frame extends JLayeredPane {
96
+
97
+ Frame(final int rows, final int columns) {
98
+
99
+ setSize(columns * 80 + 20, rows * 80 + 40);
100
+
101
+ //setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
102
+
103
+ setLayout(null);
104
+
105
+
106
+
107
+ Movement mv = new Movement();
108
+
109
+
110
+
111
+ JLabel[][] labels = new JLabel[rows][columns];
112
+
113
+ for(int i = 0; i < rows; i++) {
114
+
115
+ for(int j = 0; j < columns; j++) {
116
+
117
+ labels[i][j] = new JLabel();
118
+
119
+ labels[i][j].setBounds(i * 80, j * 80, 80, 80);
120
+
121
+ labels[i][j].setText(i + ", " + j);
122
+
123
+ labels[i][j].setBorder(new LineBorder(Color.BLACK, 2, true));
124
+
125
+ labels[i][j].setOpaque(true);
126
+
127
+ labels[i][j].setBackground(Color.WHITE);
128
+
129
+ add(labels[i][j], DEFAULT_LAYER);
130
+
131
+ }
132
+
133
+ }
134
+
135
+
136
+
137
+ JLabel label = new JLabel("Label");
138
+
139
+ label.setBounds(50, 50, 80, 80);
140
+
141
+ label.setBorder(new LineBorder(Color.BLACK, 5, true));
142
+
143
+ label.setOpaque(true);
144
+
145
+ label.setBackground(Color.WHITE);
146
+
147
+ add(label, DRAG_LAYER);
148
+
149
+
150
+
151
+ mv.addMovementListener(label);
152
+
153
+ }
154
+
155
+ }
156
+
157
+ }
158
+
159
+ ```