2012-02-20 3 views
3

У меня есть MigLayout, что я хотел бы добавить компоненты в динамический режим, сохраняя две кнопки внизу кадра (потому что это интуитивно понятно).MiGLayout несколько компонентов на границе

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

В настоящее время я использую «сетку» MigLayout для размещения динамически добавленных компонентов, а затем используя «границу» MigLayout для размещения неподвижных компонентов, но я не могу заставить обе кнопки сидеть на южная граница рядом друг с другом.

В соответствии с Quickstart PDF это должно быть возможно (и я цитирую, «вы не ограничены только одним компонентом на сторону»), но он не говорит, что , как, вы достигаете этого.

+0

Я не вижу причин, по которым вы не могли этого сделать, это просто цель настройки MigLayout. Пожалуйста, разместите свои попытки кода, чтобы мы могли в конце концов помочь вам узнать, что случилось. Но лично это не сделало бы так, см. Мой ответ ниже. – Yanflea

ответ

3

Personnally Я предпочел бы разделить мой JFrame в 2 JPanel, с BorderLayout. Поместите MigLayout в пределах JPanel в зоне CENTER, а также кнопки в пределах Коробка в районе ЮГО.

EDIT

С примера еще лучше ;-)

public static void main(String[] args) { 

    JFrame frame = new JFrame(); 
    frame.setLayout(new BorderLayout()); 

    // == MigLayout Form == 
    JPanel panelCenter = new JPanel(); 
    panelCenter.setLayout(
       new MigLayout(
         new LC().wrapAfter(4), 
         new AC().size(":80:", 0).size("115:115:115", 1, 2, 3).align("right", 0, 2), 
         new AC().size("19:19:19") 
       )); 
    panelCenter.setOpaque(false); 

    panelCenter.add(new JLabel("Label1")); 
    panelCenter.add(new JTextField(), new CC().growX()); 
    panelCenter.add(new JLabel("Label2")); 
    panelCenter.add(new JTextField(), new CC().growX()); 
    panelCenter.add(new JLabel("Label3")); 
    panelCenter.add(new JTextField(), new CC().growX()); 
    panelCenter.add(new JLabel("Label4")); 
    panelCenter.add(new JTextField(), new CC().growX()); 
    panelCenter.add(new JLabel("Label5")); 
    panelCenter.add(new JTextField(), new CC().growX()); 
    panelCenter.add(new JLabel("Label6")); 
    panelCenter.add(new JTextField(), new CC().growX()); 

    frame.add(panelCenter, BorderLayout.CENTER); 

    // == Buttons == 
    Box southPanel = Box.createHorizontalBox(); 
    southPanel.add(Box.createHorizontalGlue()); 
    southPanel.add(new JButton("Ok")); 
    southPanel.add(new JButton("Cancel")); 
    southPanel.add(Box.createHorizontalGlue()); 
    frame.add(southPanel, BorderLayout.SOUTH); 

    frame.setVisible(true); 
    frame.setSize(500, 150); 
} 
+0

Спасибо, это то, что я сделаю (более или менее). Что касается вашего комментария, я не думал, что пример кода действительно необходим на данном этапе, поскольку это скорее вопрос дизайна/общего вопроса, чем конкретная проблема, связанная с кодом. Еще раз спасибо! –

+0

Добро пожаловать. – Yanflea

+0

+1 для образца кода! –

0

Я сделал это так:

create = new JButton("Create"); 
create.addActionListener(this); 
mainPanel.add(create, "tag ok, span, split 2, sg btn"); 

cancel = new JButton("Cancel"); 
cancel.addActionListener(this); 
mainPanel.add(cancel, "tag cancel, sg btn"); 

Это на самом деле просто последняя строка моей сетки , но ключ, кажется, использует span и split (sg просто группирует размеры кнопок и tag позиционирует их - прекрасная особенность). Я нашел пример here (поиск "панель кнопок").