2017-10-27 24 views
-1

このコードをubuntuで実行すると、ウィンドウが最小化されます。アイコンをクリックすると、最小化されたままになります。 しかし、Windowsでは正常に動作しています。ubuntuでJFrameが表示されない

ここに私のコードです。

import javax.swing.*; 

public class FrameTest 
{ 
    public static void main(String args[]) 
    { 
     JPanel p = new JPanel(); 
     JButton b = new JButton("Button 1"); 
     p.add(b); 

     JFrame f = new JFrame("TestFrame"); 
     f.add(p); 

     f.setVisible(true); 
     f.setSize(500,500); 
    } 
} 

助けてください。

+1

f.pack()?トリックを行うべきである – mko

+1

あなたは 'f.pack()'か '。 ** f.setVisible(true) 'の前の' f.setSize(...) '**あなたのGUIを見えるようにするには、 'setVisible()'を最後の行にする必要があります。これは、最初のビューで見ることができますが、Ubuntuをインストールしていないのでテストできません。 – Frakcool

+2

Swing/AWT GUIはイベントディスパッチスレッド。それはここでは問題ではないかもしれませんが、とにかくベストプラクティスを使用してください。また、@mkoで述べたように、すべてのコンポーネントが追加された後、 'setVisible(true)'の前に 'pack()'を使ってGUIのサイズを変更する必要があります。 'f.setSize(500,500);を削除してください。 - これは単なる推測です。 –

答えて

1

f.setSize(500, 500);JFrame f = new JFrame("TestFrame");f.add(p);の間に入れます。 JFrameが完全にビルドされて初期化される前にf.setVisible(true);に電話することはできません。また、BorderLayoutなどのJPanel/JFrameでLayoutManagerを使用することをお勧めします。

import java.awt.BorderLayout; 

import javax.swing.*; 

public class FrameTest 
{ 
    public static void main(String args[]) 
    { 
     JPanel p = new JPanel(); 
     BorderLayout bl = new BorderLayout(0, 0); 
     p.setLayout(bl); 

     JButton b = new JButton("Button 1"); 
     p.add(b, BorderLayout.CENTER); 

     JFrame f = new JFrame("TestFrame"); 
     f.setSize(500,500); 
     f.getContentPane().add(p); 
     f.setVisible(true); 
    } 
} 
+1

* "JFrameの前にf.setVisible(true)を呼び出すことはできません。完全にビルドされた "* - できますが、コンポーネントの再検証と再描画が必要です。 * "BorderLayoutなどのJPanel/JFrameでLayoutManagerを使用することをお勧めします。" * - すべてのウィンドウベースのクラスはデフォルトでBorderLayoutです。 Java 1.6、 'JFrame#add'が' contentPane'に呼び出しを転送してから 'getContentPane()。add'を使う必要はありませんでした。ウィンドウのサイズを変更した後に変更しても、結果に影響はありません。それ以外の場合は、最初に読み込まれたときにフレームが「ポップ」しているように見えるかもしれません – MadProgrammer

関連する問題