2016-04-06 8 views
0

私は完全に動作するJavaでパスワードジェネレータを作成しました。私の機能は動作しています(涙と汗と血の沢山の後:))、残っている唯一の問題は私のGUIのレイアウトです。ボタンのタイトルフォーム Swing JavaのBorderLayoutが正しく動作しない

  • 1ペイン(下/南)のためのセンターで
  • 1ペインため

    • 1ペイン(トップ/ノース):

      私のアプローチは以下の通りでしたそして、TextField

    これは

    enter image description here

    結果であり、

    これは私がそれを望んでいた方法ではないことがわかります。しかし、私のコードを見ると上から下にうまく配置しなければなりません。

    どこが間違っていましたか?

    マイコード:

    コンストラクタ(JFrameのから延びている)

    public PasswordGenerator(){ 
        this.setContentPane(ContentPane()); 
        this.setSize(500,270); 
        this.setResizable(true); 
        this.setVisible(true); 
    } 
    

    ペイン:

    private JPanel ContentPane() 
    { 
        JPanel ContentPane = new JPanel(); 
        ContentPane.add(getTopPane(), BorderLayout.NORTH); 
        ContentPane.add(getCenterPane(),BorderLayout.CENTER); 
        ContentPane.add(getSouthPane(),BorderLayout.EAST); 
        return ContentPane; 
    } 
    
    private JPanel getTopPane(){ 
        JPanel TopPane = new JPanel(); 
        JLabel intro = new JLabel("Password generator V1.0"); 
        intro.setFont(new Font("TimesRoman",Font.BOLD,20)); 
        TopPane.setLayout(new GridLayout(1,1)); 
        TopPane.add(intro); 
        return TopPane; 
    } 
    
    private JPanel getCenterPane(){ 
        JPanel CenterPane = new JPanel(); 
    
        CenterPane.add(aantalChars); 
        CenterPane.setLayout(new GridLayout(6,3)); 
        //8,2 
        hidden.setVisible(false); 
        hiddenL.setVisible(false); 
        CenterPane.add(aantalCharsLabel); 
        CenterPane.add(hidden); 
        CenterPane.add(hidden); 
        CenterPane.add(hiddenL); 
        CenterPane.add(lowerCase); 
        CenterPane.add(lowerCaseLabel); 
        CenterPane.add(upperCase); 
        CenterPane.add(upperCaseLabel); 
        CenterPane.add(numberCase); 
        CenterPane.add(numberCaseLabel); 
        CenterPane.add(symbolCase); 
        CenterPane.add(symbolCaseLabel); 
    
    
        return CenterPane; 
    } 
    
  • +0

    JPanelのは、私は方法ContentPane.setLayout(新しいのBorderLayout())をしようとしたが、それが与えるあなたのCONTENTPANE方法 – MadProgrammer

    +0

    を詳しく見てみ、デフォルトでFlowLayoutのを使用していますGUIの奇妙な外観。 –

    +1

    コンポーネントを追加する前または後に設定しましたか?コンポーネントを追加する前に設定する必要があります – MadProgrammer

    答えて

    3

    あなたのContentPaneLayoutManagerとしてBorderLayoutを設定するのを忘れていました。正しい制約を使うだけでは不十分です。これにはContentPane.setLayoutManager()を使用するか、JPanelのコンストラクタに直接LayoutManagerを渡すことができます。

    +0

    ContentPane.setLayout()で使用する制約は何ですか?私はちょうど(新しいBorderLayout())しようとしましたが、GUIの非常にサイケデリックなビューを提供します。 –

    +0

    'new BorderLayout()'は問題ありません。サイケデリックな見方はどういう意味ですか? – Vampire

    +0

    ああ、多分サイケデリックなのは、あなたがあなたのボタンバーに 'SOUTH'をしたいところで' EAST'を使ったことを意味しますか? – Vampire

    2

    JPanelのデフォルトのレイアウトマネージャは、FlowLayoutマネージャです。あなたが具体的に設定する必要がありBorederLayoutを使用するには :

    private JPanel ContentPane() 
         { 
          JPanel ContentPane = new JPanel(); 
          ////////////////////////////////////////////// 
          ContentPane.setLayout(new BorderLayout()); 
          //////////////////////////////////////////// 
          ContentPane.add(getTopPane(), BorderLayout.NORTH); 
          ContentPane.add(getCenterPane(),BorderLayout.CENTER); 
          ContentPane.add(getSouthPane(),BorderLayout.SOUTH); 
          return ContentPane; 
         } 
    
    関連する問題