2011-10-28 14 views
0

誰でも、このJFrameでpack()が動作しない理由を説明できますか?JFrame内で能動的にレンダリングされたJPanelを整列する

JPanelが1つあります(実際にはJPanelを拡張するクラス - inner)。ここで

は、私が使用しているコードです:

inner.setPreferredSize(new Dimension(800, 600)); 
add(inner); 
pack(); 
setResizable(false); 
setLocationRelativeTo(null); // to center the JFrame on screen 
setDefaultCloseOperation(EXIT_ON_CLOSE); 
setVisible(true); 

余分なスペース(つまり、JFrameの寸法のマイナスのJPanelの寸法である)のJFrameの装飾の正確な幅と高さのようです。

enter image description here

+0

余分なスペースは、JFrameの下部と右側にグレーで表示されます。コントラストが低すぎる場合は、別の画像を投稿することができます。 – Peter

+0

'setUndecorated(boolean v)'をトグルしてみましたか? – Jack

+0

私は装飾をしたいと思います。しかし、あなたが好奇心が強いならば、装飾されていないウィンドウのサイズはより正確です(しかし、私の測定によれば、ちょっとピクセルがずれてしまいます)。 – Peter

答えて

0

私はJFrameのといないのJPanelから(アクティブレンダリング)を描いていたが判明...ので、余分なスペースは、(JPanelのの引き分けの結果であった)0に整列されているオブジェクト、 0(JFrame内)。

解決:this post

3

起動setResizable(false)pack()前。 「余分なスペースは、JFrameの装飾の正確な幅と高さのようです。」

補足:sscceは私の最初の推測が間違っていたことを示しています。

enter image description here

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

/** @see http://stackoverflow.com/questions/7924830 */ 
public class NonResizable extends JPanel { 

    public NonResizable() { 
     this.setPreferredSize(new Dimension(400, 300)); 
     this.setBackground(Color.lightGray); 
     this.setBorder(BorderFactory.createLineBorder(Color.blue)); 
    } 

    private void display() { 
     JFrame f = new JFrame("NonResizable"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setLayout(new FlowLayout()); 
     f.setBackground(Color.white); 
     f.add(this); 
     f.pack(); 
     f.setResizable(false); 
     f.setLocationRelativeTo(null); 
     f.setSize(500, 400); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new NonResizable().display(); 
      } 
     }); 
    } 
} 
+0

これが役に立たない場合は、あなたが説明している問題を示す[sscce](http://sscce.org/)を提供してください。 – trashgod

+0

スペースの一部を削除しますが、すべて削除するわけではありません。私は一緒に1つのSscceを取得する作業を行います。 – Peter

+0

私の最初の推測は間違っていた。上記の例を追加しました。 – trashgod

関連する問題