2016-04-06 31 views
0

Java'da bir şifre üreticisi oluşturdum ve mükemmel çalışıyor. İşlevlerim çalışıyor (çok fazla gözyaşı, ter ve kandan sonra :)), ama kalan tek sorun benim GUI'mizin düzeni. düğmeleri için başlık formunda Swing'de BorderLayout Java düzgün çalışmıyor

  • 1 bölmesi (altta/güney) için merkezde
  • 1 bölmesi için

    • 1 bölmesi (Üst/Kuzey):

      Benim yaklaşımım şu oldu ve textfield

    Bu sonuç

    enter image description here

    olduğunu

    Gördüğünüz gibi bunu istediğim gibi değil. Ama eğer koduma bakarsam, yukarıdan aşağıya doğru güzelce yerleştirilmelidir.

    Bu sorun nereye gitti?

    Kodum:

    (JFrame uzanır) yapıcı

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

    bölmeleri:

    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 varsayılan olarak FlowLayout kullanır, senin ContentPane yöntemiyle – MadProgrammer

    +0

    daha yakından bakmak ben yöntemi ContentPane.setLayout (yeni BorderLayout()) denedik ama bir verir GUI'nin daha çılgın bir görünümü. –

    +1

    Bileşenleri eklemeden önce mi, sonra mı eklediniz? Herhangi bir bileşen eklemeden önce onu ayarlamanız gerekecek – MadProgrammer

    cevap

    3

    Sen ContentPane üzerinde BorderLayoutLayoutManager olarak ayarlamak unuttum. Sadece doğru kısıtlamaları kullanmak yeterli değildir. Bunun için ContentPane.setLayoutManager()'u kullanabilir veya LayoutManager'u JPanel yapıcısına doğrudan verebilirsiniz.

    +0

    ContentPane.setLayout() 'da hangi kısıtlamalar kullanılacak? Sadece denedim (yeni BorderLayout()) ama GUI'nin çok psychedelic bir görünümünü veriyor. –

    +0

    'new BorderLayout()' dır. Psychedelic görünümünden ne demek istiyorsun? – Vampire

    +0

    Ah, belki de psychedelic, düğme çubuğunuz için 'SOUTH' istediğin yerde 'EAST' kullandığın anlamına mı geliyor? – Vampire

    2

    JPanel için varsayılan düzen yöneticisi FlowLayout yöneticisidir. siz onu özellikle ayarlamanız gerekir BorederLayout kullanmak için:

    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; 
         }