2017-07-30 14 views
1

バックエンドでJavaで何年か働いた後、私はGUIを構築するプロジェクトに取り掛かり、Java Swingは私を夢中にしている。JavaスイングでJScrollPaneをパネルに追加すると何も表示されない何かが表示される

私は画面に収まらない大きすぎるJPanelを持っているので、JScrollPaneでいくつかのテストを行っています。次の例では、JPanelにカップルボタンを追加し、JPanelでJScrollPaneを作成しますが、画面に何も表示されません。

import java.awt.Container; 
import java.awt.FlowLayout; 

import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 

public class TestScrollPane extends JDialog { 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     try { 
      TestScrollPane dialog = new TestScrollPane(); 
      dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
      dialog.setVisible(true); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    /** 
    * Create the dialog. 
    */ 
    public TestScrollPane() { 
     setBounds(100, 100, 857, 541); 
     getContentPane().setLayout(null); 
     { 
      JPanel panel = new JPanel(); 
      panel.setBounds(131, 167, 141, 221); 
      getContentPane().add(panel); 
      panel.setLayout(null); 
      { 
       JButton btnNewButton = new JButton("New button"); 
       btnNewButton.setBounds(0, 0, 115, 29); 
       panel.add(btnNewButton); 
      } 
      { 
       JButton btnNewButton_1 = new JButton("New button"); 
       btnNewButton_1.setBounds(26, 192, 115, 29); 
       panel.add(btnNewButton_1); 
      } 

      JScrollPane jsp = new JScrollPane(panel); 
      getContentPane().add(jsp); 

     } 
     { 
      JPanel buttonPane = new JPanel(); 
      buttonPane.setBounds(0, 446, 835, 39); 
      buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); 
      getContentPane().add(buttonPane); 
      { 
       JButton okButton = new JButton("OK"); 
       okButton.setActionCommand("OK"); 
       buttonPane.add(okButton); 
       getRootPane().setDefaultButton(okButton); 
      } 
      { 
       JButton cancelButton = new JButton("Cancel"); 
       cancelButton.setActionCommand("Cancel"); 
       buttonPane.add(cancelButton); 
      } 
     }  
    } 

} 

なぜ表示されないのかわかりません。 JPanelを作成してボタンを追加し、JScrollPaneをウィンドウに追加します。私はWindwBuilder Proを使用しています。その理由は、コードが奇妙に見えます。

ありがとうございました。

+0

のJava GUIは「異なるOS上で動作する必要があり、画面サイズ、異なるロケールの異なるPLAFsを使用してなど、画面の解像度:

は、Oracleのチュートリアルを参照してください。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 –

答えて

1

レイアウトマネージャを使用しない場合、つまりsetLayout(null)を使用する場合は、パネルのコンポーネントをコードでレイアウトする必要があります。ほとんどのコンポーネントは寸法ゼロで始まり、したがって表示されません。

上記のコードでは、スクロールペインの位置と寸法がありません:jsp.setBounds(...)は他のコンポーネントと同様です。

通常、コンポーネントを自分でレイアウトすることは推奨されません。レイアウトマネージャ(たとえば、GridBagLayout、BorderLayoutなど)を使用することをお勧めします。 Lesson: Laying Out Components Within a Container

2

私は今、私はすべての4つのボタンを参照してください

getContentPane().setLayout(new FlowLayout()); 
panel.setLayout(new FlowLayout()); 

getContentPane().setLayout(null); 
panel.setLayout(null); 

を変更しました。

関連する問題