2016-08-01 13 views
0

私の主題に関連する以前の投稿を見ましたが、余り役に立たない。BoxLayoutは最後に追加されたコンポーネントのみを表示します

BoxLayoutを使用してコンポーネントを整列しようとしましたが、動作させることができません。私はしばらくの間、異なる結果でそれを試してみましたが、私はそれを理解することはできません。私は問題なしでデフォルトのFlowLayoutを使用しました。私は学び、知識を広げようとしており、BoxLayoutは私のプログラムにとってはより良いでしょう。ユーザーがアプリケーションウィンドウのサイズを変更した場合、すべてを整列させておきたい。私はこの方法ですべてのサイズを調整しました。

package GUI; 
import javax.swing.*; 
import java.awt.*; 

/** 
* Created by Thunderfoot on 7/31/2016. Keep Growing! 
* Graphical User Interface 
* Needs 3 JPanels(Text area + scroll pane)(2 Buttons) (1 Button), a JTextArea, JScrollPane, and 3 JButtons 
*/ 
public class PrimaryFrame extends JFrame { 

    //Class variables 
    private static JPanel panel1, panel2, panel3; 
    public static JTextArea output; 

    //Constructor 
    public PrimaryFrame() { 
     //Frame component attributes 
     final Dimension FRAME_SIZE = new Dimension(400, 400); 
     final Dimension PANEL1_SIZE = new Dimension(400, 250); 
     final Dimension PANEL2_SIZE = new Dimension(400, 40); 
     final Dimension PANEL3_SIZE = new Dimension(400, 40); 

     //JFrame is PrimaryFrame 
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     setPreferredSize(FRAME_SIZE); 
     setMaximumSize(FRAME_SIZE); 
     setTitle("Fighting Game"); 

     //JPanel for Text 
     panel1 = new JPanel(); 
     panel1.setLayout(new BoxLayout(panel1, BoxLayout.PAGE_AXIS)); 
     panel1.setMinimumSize(PANEL1_SIZE); 
     panel1.setPreferredSize(PANEL1_SIZE); 
     panel1.setMaximumSize(PANEL1_SIZE); 
     panel1.setBackground(Color.BLACK); 

     //JPanel for Attack and Kick Buttons 
     panel2 = new JPanel(); 
     panel2.setLayout(new BoxLayout(panel2, BoxLayout.LINE_AXIS)); 
     panel2.setMinimumSize(PANEL2_SIZE); 
     panel2.setPreferredSize(PANEL2_SIZE); 
     panel2.setMaximumSize(PANEL2_SIZE); 
     panel2.setBackground(Color.BLUE); 

     //JPanel for Power Attack Button 
     panel3 = new JPanel(); 
     panel3.setLayout(new BoxLayout(panel3, BoxLayout.PAGE_AXIS)); 
     panel3.setMinimumSize(PANEL3_SIZE); 
     panel3.setPreferredSize(PANEL3_SIZE); 
     panel3.setMaximumSize(PANEL3_SIZE); 
     panel3.setBackground(Color.ORANGE); 
     panel3.add(Box.createHorizontalGlue()); 
     panel3.add(Box.createVerticalGlue()); 

     //JTextArea & JScrollPane 
     output = new JTextArea(); 
     output.setEditable(false); 
     JScrollPane outputScroller = new JScrollPane(output, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     outputScroller.setMaximumSize(new Dimension(375, 250)); 
     outputScroller.setBorder(BorderFactory.createLineBorder(Color.RED)); 
     panel1.add(outputScroller); 
     panel1.add(Box.createHorizontalGlue()); 
     panel1.add(Box.createVerticalGlue()); 

     //Attack Button 
     JButton attackButton = new JButton(" ATTACK "); 
     attackButton.setMaximumSize(new Dimension(75, 30)); 
     attackButton.setBorderPainted(true); 
     //Kick Button 
     JButton kickButton = new JButton(" KICK "); 
     kickButton.setMaximumSize(new Dimension(75, 30)); 
     kickButton.setBorderPainted(true); 
     //Add components 
     panel2.add(attackButton); 
     panel2.add(Box.createHorizontalGlue()); 
     panel2.add(Box.createVerticalGlue()); 
     panel2.add(kickButton); 
     panel2.add(Box.createHorizontalGlue()); 
     panel2.add(Box.createVerticalGlue()); 

     //Power Attack Button 
     JButton powAttButton = new JButton(" POWER ATTACK "); 
     powAttButton.setMaximumSize(new Dimension(150, 30)); 
     powAttButton.setBorderPainted(true); 
     panel3.add(powAttButton); 
     panel3.add(Box.createHorizontalGlue()); 

    } 

    public void buildGUI() { 
     //Add components and build GUI Frame 
     this.add(panel3); 
     this.add(panel2); 
     this.add(panel1); 

     //Set attributes 
     //Pack components together inside of frame 
     pack(); 
     //Center of screen 
     setLocationRelativeTo(null); 
     //Make frame visible 
     setVisible(true); 
    } 

} 
+2

あなたのJFrameのレイアウトを設定するのを忘れていました。 –

答えて

2

あなたのPrimaryFrameのレイアウトを設定する必要があります。 私はあなたのbuildGUI()メソッドに追加の行を追加します。お勧め:

public void buildGUI() { 

     //defines the Layout for the main Frame 
     this.setLayout(new GridLayout(3,1)) //its up to you wich Layout you use 

     //Add components and build GUI Frame 
     this.add(panel3); 
     this.add(panel2); 
     this.add(panel1); 

     //Set attributes 
     //Pack components together inside of frame 
     pack(); 
     //Center of screen 
     setLocationRelativeTo(null); 
     //Make frame visible 
     setVisible(true); 
    } 

お知らせGridLayout(3,1)は3行1列でレイアウトを生成します

+0

ありがとう、私の目と脳が疲れていたと思うXD – ThunderfootMOB

関連する問題