2016-10-29 4 views
0

私は何かについてアンケートをしなければならないという問題があり、複数のレイアウトを使用する必要があります。私のフレームは大部分のスペースを占めます

私の問題は、2つのJPanelをグリッドレイアウト(1辺のみ)に追加すると、最初のパネルがほとんどのスペースを占めるということです。

コード:

public class MainFrame extends JFrame implements ItemListener{ 
     JPanel mainPanel,rightSideAge,rightSideGender,leftSide,rightSideBox,leftSideBox; 
     JTextArea nameArea; 
     JSpinner ageSpinner; 
     JRadioButton genMale,genFema; 
     ButtonGroup genderGroup; 

    MainFrame(){ 
     this.setSize(1000, 800); 
     this.setLocationRelativeTo(null); 
     this.setTitle("Közvélemény kutatás a zenei ízlésekről"); 
     mainPanel = new JPanel(new GridLayout(0, 2)); 
     this.setContentPane(mainPanel); 

     /* --- RIGHT PANEL --- */ 
     rightSideBox = new JPanel(); 
     rightSideBox.setLayout(new BoxLayout(rightSideBox, BoxLayout.Y_AXIS)); 

     rightSideAge = new JPanel(new FlowLayout(FlowLayout.LEFT)); 
     rightSideAge.setBorder(BorderFactory.createLineBorder(Color.BLUE)); 
     //rightSide.setLayout(new BoxLayout(rightSide, BoxLayout.Y_AXIS)); 
     mainPanel.add(rightSideBox); 

      //Age label 
     //JLabel labelAge = new JLabel("Kor: "); 
     //labelAge.setSize(100, 30); 
      //Age Spinner 
     ageSpinner = new JSpinner(new SpinnerNumberModel(1, 1, 120, 1)); 
     ageSpinner.setPreferredSize(new Dimension(40, 20)); 
     Component mySpinnerEditor = ageSpinner.getEditor(); 
     JFormattedTextField jftf = ((JSpinner.DefaultEditor) mySpinnerEditor).getTextField(); 
     jftf.setColumns(5); 

      //New box for zenei ízlés 
     rightSideGender = new JPanel(); 
     rightSideGender.setBorder(BorderFactory.createLineBorder(Color.GREEN)); 
     rightSideGender.setLayout(new BoxLayout(rightSideGender,BoxLayout.Y_AXIS)); 

      //Gender ComboBox 
      genderGroup = new ButtonGroup(); 
      genMale = new JRadioButton("Férfi"); 
      genderGroup.add(genMale); 
      genFema = new JRadioButton("Nő"); 
      genderGroup.add(genFema); 

     /* --- LEFT SIDE --- */ 

     rightSideBox.setBorder(BorderFactory.createLineBorder(Color.RED)); 


     /* ADD STUFF TO PANELS */ 
      /* RightSideBox */ 
      rightSideBox.add(rightSideAge); 
      rightSideBox.add(rightSideGender); 
       /*RIGHT SIDE PANELS*/ 
       rightSideGender.add(new JLabel("Nem:")); 
       rightSideGender.add(genMale); 
       rightSideGender.add(genFema); 
       rightSideAge.add(new JLabel("Kor")); 
       //rightSide.add(labelAge); 
       rightSideAge.add(ageSpinner); 
       /*LEFT SIDE PANEL*/ 

     this.setVisible(true); 
     this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

ブルーラインアウトのみJSpinnerの下にsould:

mainPanel = new JPanel(new GridLayout(0, 2)); 

あなただけ:

https://i.stack.imgur.com/xF5At.png

+0

を[MCVE]を投稿してください。 (最小限のケースを書くことは、良いデバッグ手法です。そうすることで、問題を解決する可能性が高くなります。) – c0der

+0

また、必要なGUIレイアウトを示す画像を描画します。 –

+0

http://imgur.com/a/1K9sF これは私が作りたいものです。色によって異なる罫線が表示されます。 – BenjiVok

答えて

0
ageSpinner.setPreferredSize(new Dimension(40, 20)); 

まず、コンポーネントのサイズを手動で設定しないでください。各Swingコンポーネントは、独自のサイズを決定します。

ブルーラインアウトは、JSpinnerの下であるべきである:使用可能なスペースがある場合

ボックスのレイアウトが最大サイズにコンポーネントのサイズを変更します。なんらかの理由で、JSpinnerは最大の高さを持つようには見えないので、利用可能なスペースをすべて満たすために展開されます。あなたが何かを行うことができます。この修正するには

:あなたの問題を表示するために最低限の投稿:

//ageSpinner.setPreferredSize(new Dimension(40, 20)); 
ageSpinner.setMaximumSize(ageSpinner.getPreferredSize()); 
0

mainPanelレイアウトは、2つの列を持つように設定されています1パネルをに追加する0これGridLayoutを使用しています。

mainPanel.add(rightSideBox); 

注:最初に追加コンポーネント、この場合にはrightSideBoxそれはLEFTいずれかになりますつまり、最初の列を占有します。

rightSideGendermainPanelにを追加するには以下を行う必要があります。

mainPanel.add(rightSideGender); 

第二の成分は、あなたがこの場合RIGHT 1には、第二のカラムを占有します。この場合rightSideGenderには、追加します。

+0

これは表示されますが、Nem(緑色に囲まれたもの)は正しい位置にありません。 – BenjiVok

関連する問題