回答編集履歴

2

追記

2015/02/11 13:03

投稿

argius
argius

スコア9388

test CHANGED
@@ -40,4 +40,112 @@
40
40
 
41
41
  ```
42
42
 
43
+ ---
43
44
 
45
+
46
+
47
+ (追記)
48
+
49
+
50
+
51
+ Windows 7では発生しないので、LinuxもしくはUbuntu固有の問題なのかもしれませんね。
52
+
53
+ ちなみにWindows 7では、100x30(width:100,height:30)にした場合、ウィンドウのサイズは142x48になっています。
54
+
55
+
56
+
57
+
58
+
59
+ 直接原因は分かりませんが、いくつか修正したほうが良いと思う箇所はあります。
60
+
61
+ 良かったら参考にしてみてください。
62
+
63
+ ・ウィンドウサイズは(やはり)`setSize`を使う
64
+
65
+ ・`BorderLayout`ではコンポーネントのサイズは指定できない
66
+
67
+ ・`BorderLayout`に追加するときは、`add(component, BorderLayout.CENTER)`などを使う
68
+
69
+ ・`validate`を使ってみる
70
+
71
+
72
+
73
+ ```lang-java
74
+
75
+ import java.awt.BorderLayout;
76
+
77
+ import javax.swing.JButton;
78
+
79
+ import javax.swing.JFrame;
80
+
81
+
82
+
83
+ public class Test extends JFrame {
84
+
85
+ JButton b;
86
+
87
+ public Test() {
88
+
89
+ //JFrame
90
+
91
+ setTitle("Test");
92
+
93
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
94
+
95
+ // setBounds(0, 0, 100, 30);
96
+
97
+ setSize(100, 30);
98
+
99
+ setResizable(false);
100
+
101
+
102
+
103
+ //JButton
104
+
105
+ b = new JButton();
106
+
107
+ b.setText("hello!");
108
+
109
+ // b.setVisible(true);
110
+
111
+ // b.setSize(100, 30);
112
+
113
+
114
+
115
+ // add(b);
116
+
117
+ add(b, BorderLayout.CENTER);
118
+
119
+ validate();
120
+
121
+ setVisible(true);
122
+
123
+ }
124
+
125
+
126
+
127
+ public static void main(String[] args) {
128
+
129
+ SwingUtilities.invokeLater(new Runnable() {
130
+
131
+ @Override
132
+
133
+ public void run() {
134
+
135
+ @SuppressWarnings("unused")
136
+
137
+ Test my = new Test();
138
+
139
+ }
140
+
141
+ });
142
+
143
+ }
144
+
145
+
146
+
147
+ }
148
+
149
+ ```
150
+
151
+

1

本回答

2015/02/11 13:03

投稿

argius
argius

スコア9388

test CHANGED
@@ -1 +1,43 @@
1
1
  おそらく`new Test()`している処理が`main`メソッドにあると思いますが、そこも記載していただけますでしょうか。
2
+
3
+
4
+
5
+ ---
6
+
7
+
8
+
9
+
10
+
11
+ `AWT`や`Swing`などのGUIを使用する場合は、描画処理を**イベントディスパッチスレッド**(AWTスレッド)で実行されるようにしないと、描画が正しく行われない可能性があります。
12
+
13
+ イベントディスパッチスレッドで実行するには、Swingの場合は`SwingUtilities.invokeLater(Runnable)`を使います。
14
+
15
+
16
+
17
+ 例:
18
+
19
+ ```lang-java
20
+
21
+ // import javax.swing.SwingUtilities;
22
+
23
+
24
+
25
+ public static void main(String[] args) {
26
+
27
+ SwingUtilities.invokeLater(new Runnable() {
28
+
29
+ @Override
30
+
31
+ public void run() {
32
+
33
+ Test my = new Test();
34
+
35
+ }
36
+
37
+ });
38
+
39
+ }
40
+
41
+ ```
42
+
43
+