2016-10-11 18 views
0

Я пишу приложение, в котором я хотел бы иметь этот макетMigLayout размер обновление клеток на основе процентного после изменения размеров окна

  45%    35%   10% 
    ----------------------------------------------- 
    |     |    |   | 
    |     |    |   | 
60% |     |    |   | 
    |     |    |   | 
    -------------------------------------|   | 
    |         |   | 
40% |         |   | 
    |         |   | 
    ------------------------------------------------ 

я построить макет, используя менеджер MigLayout таким образом

MigLayout ml = new MigLayout("debug", 
      "10[45%!,fill]5[35%!,fill]10[20%!,fill]", 
      "10[60%!,fill]5[40%!,fill]"); 

setLayout(ml); 
add(panel1, "cell 0 0 1 1, grow"); 
add(panel1, "cell 1 0 1 1, grow"); 
add(panel3, "cell 2 0 1 2, grow"); 
add(panel4, "cell 0 1 2 1, grow"); 

Проблема в том, что если изменить размер окна, макет не будет соответствовать новому размеру. Он просто остается того же размера.

Как исправить это, чтобы макет был обновлен и получил размер окна?

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

Спасибо.

ответ

1

используя следующий код

import java.awt.*; 
import javax.swing.*; 
import net.miginfocom.swing.MigLayout; 

public class MigLay extends JFrame { 

    private MigLay() { 
     super("Button Layout"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new MigLayout("debug", 
      "10[45%!,fill]5[35%!,fill]10[20%!,fill]", 
      "10[60%!,fill]5[40%!,fill]")); 
     createPanels(); 
     pack(); 
     setVisible(true); 
    } 

    private void createPanels() { 
     JPanel panel1 = new JPanel(), panel2 = new JPanel(), panel3 = new JPanel(), panel4 = new JPanel(); 
     JLabel label = new JLabel("Panel 1"); 
     panel1.add(label); 

     label = new JLabel("Panel 2"); 
     panel2.add(label); 

     label = new JLabel("Panel 3"); 
     panel3.add(label); 

     label = new JLabel("Panel 4"); 
     panel4.add(label); 

     add(panel1, "cell 0 0 1 1, grow"); 
     add(panel2, "cell 1 0 1 1, grow"); 
     add(panel3, "cell 2 0 1 2, grow"); 
     add(panel4, "cell 0 1 2 1, grow"); 
    } 

    public static void main(String[] args) { 
     new MigLay(); 
    } 
} 

изменение: 1) Вы назвали панель 1 дважды, поэтому я создал панель 2.
2) Я создал макет в методе setLayout().

Если ни одно из этих изменений не устраняет вашу проблему, проблема заключается не в коде, который вы опубликовали выше, а где-то в коде.

+1

Я пробовал это, и он работает, но я узнал, что использовал очень старую реализацию MigLayout. Обновление библиотеки макетов исправило это для меня. – Ashkan

+0

@ Ашкан Великий. Я рад, что вы получили его на работу – Dan