2013-11-21 2 views
3

Мне нужно создать контент кадра, основываясь на их процентном соотношении зрительного пространства, в котором они нуждаются. Например, 20% для панели1,80% для панели2. Какая компоновка такого управления компоновкой?Какой макет принимает проценты вместо значений в swing?

ответ

9
  • в восстановленной форме GridBagLayout, но с успехом для вашего требования 80% - 20%

.

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.*; 

public class BorderPanels extends JFrame { 

    private static final long serialVersionUID = 1L; 

    public BorderPanels() { 
     setLayout(new GridBagLayout());// set LayoutManager 
     GridBagConstraints gbc = new GridBagConstraints(); 
     JPanel panel1 = new JPanel(); 
     Border eBorder = BorderFactory.createEtchedBorder(); 

     panel1.setBorder(BorderFactory.createTitledBorder(eBorder, "80pct")); 
     gbc.gridx = gbc.gridy = 0; 
     gbc.gridwidth = gbc.gridheight = 1; 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.anchor = GridBagConstraints.NORTHWEST; 
     gbc.weightx = gbc.weighty = 70; 
     add(panel1, gbc); // add component to the ContentPane 

     JPanel panel2 = new JPanel(); 
     panel2.setBorder(BorderFactory.createTitledBorder(eBorder, "20pct")); 
     gbc.gridy = 1; 
     gbc.weightx = gbc.weighty = 20; 
     gbc.insets = new Insets(2, 2, 2, 2); 
     add(panel2, gbc); // add component to the ContentPane 

     JPanel panel3 = new JPanel(); 
     panel3.setBorder(BorderFactory.createTitledBorder(eBorder, "20pct")); 
     gbc.gridx = 1; 
     gbc.gridy = 0; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 2; 
     gbc.weightx = /*gbc.weighty = */ 20; 
     gbc.insets = new Insets(2, 2, 2, 2); 
     add(panel3, gbc); // add component to the ContentPane 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // important 
     pack(); 
     setVisible(true); // important 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { // important 

      @Override 
      public void run() { 
       BorderPanels borderPanels = new BorderPanels(); 
      } 
     }); 
    } 
} 

  • пользовательских MigLayout
+0

Теперь вы добавили картинку, мне нужно проголосовать;) – MadProgrammer

+0

особенно моя грамматика в комментариях отлично, мне нужно их редактировать .... – mKorbel

+0

Всегда думайте, что weightx/weighty от 0 до 1? – alex2410

2

Ни один из макетов JDK не позволяет вам делать это напрямую. Типы BoxLayout и GridBagLayout позволяют вам это делать.

С помощью GridBagLayout вы можете указать значение weightx/y между 0 и 1, которое сообщает диспетчеру макета, как выделить дополнительное пространство. Поэтому, предполагая, что вы создаете компоненты с предпочтительным размером в соотношении 80/20, они должны иметь возможность расти в том же соотношении.

BoxLayout проще в использовании в этом отношении, потому что вам не нужно указывать конкретное ограничение, которое оно просто изменяет в соотношении предпочтительных размеров.

Для простого менеджера макетов, который был предназначен для указания относительных размеров в качестве простого ограничения, вы можете проверить Relative Layout.

Смежные вопросы