Swingでのレイアウトが縦方向(高さ成分だけ)が稀にずれてしまう現象の修正が頑張ってもできないので質問させていただきます。修正方法が有りましたらご教授して頂けると嬉しいです。
実行環境
OS:ubuntu 14.04LTS 32bit
Eclipse Version: 3.8.1
javaSE-1.7(java-7-openjdk-i386)
問題のコード
lang
1import javax.swing.JButton; 2import javax.swing.JFrame; 3 4public class Test extends JFrame{ 5 JButton b; 6 public Test() { 7 //JFrame 8 setTitle("Test"); 9 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 10 setBounds(0, 0, 100, 30); 11 setResizable(false); 12 13 //JButton 14 b = new JButton(); 15 b.setText("hello!"); 16 b.setVisible(true); 17 b.setSize(100, 30); 18 19 add(b); 20 setVisible(true); 21 } 22}
いくつかの実行結果
setResizable(false)しているにもかかわらず、下図一番右のような高さが異なるJFrameがたまに出現してしまいます。感覚としては5〜10回に1回くらいJFrameサイズがずれます。
![イメージ説明]WIDTH:566
試みたこと
● ネットで同様の現象を調べた結果、環境が異なりますが同様の現象だと思い(Java レイアウトずれ@Windows)にあるように
1)Frame サイズ指定
2)メニューバー&メニューを登録
3)パネルにボタンを登録
4)Frame にパネルを登録(Layoutには NULL を指定)
5)表示(setVisible(true))
の順番でコーディング ⇒ 変化なし
● setLayout(new BorderLayout());を追加してきちんとレイアウト指定 ⇒ 変化なし
● Jframeを表示した際に、Jframeの移動やリサイズが自動で起こることを確認したので、何度もサイズを指定し直す。 ⇒体感、ズレる回数は少し減ったが、ズレることがある。
lang
1//addComponentListener(new compListen());を追加済み 2 3 private void updateSize(ComponentEvent e) { 4 System.out.println("e=" + e.toString()); 5 setSize(100, 30); 6 b.setSize(100, 30); 7 getContentPane().setPreferredSize(new Dimension(100, 30)); 8 getContentPane().setSize(new Dimension(100, 30)); 9 } 10 11 class compListen implements ComponentListener{ 12 @Override 13 public void componentHidden(ComponentEvent e) { 14 // TODO Auto-generated method stub 15 updateSize(e); 16 } 17 18 @Override 19 public void componentMoved(ComponentEvent e) { 20 // TODO Auto-generated method stub 21 updateSize(e); 22 } 23 24 @Override 25 public void componentResized(ComponentEvent e) { 26 // TODO Auto-generated method stub 27 updateSize(e); 28 } 29 30 @Override 31 public void componentShown(ComponentEvent e) { 32 // TODO Auto-generated method stub 33 updateSize(e); 34 } 35 }
疑問点
プログラム中では、ボタン・フレームのサイズを共にwidth:100,height:30としているが、ウィンドウのサイズはどうなっている?下図参照(これがフレームサイズだと思ってたんだけれど・・)
![イメージ説明]WIDTH:566
JavaDrive:フレームのサイズと表示位置によると、むしろ高さが狭くなっている方が通常?などと考えたり・・・
以下、JavaDrive様より引用
![イメージ説明]WIDTH:600
ここまで引用
長くなってしまいましたが、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/11 11:52
2015/02/11 12:15
2015/02/11 13:03
2015/02/11 13:40