Swing Jpanel Autofit содержимое вопроса - PullRequest
0 голосов
/ 01 сентября 2011

Я хочу добиться следующего дизайна экрана с помощью Swing:

-----------------------------------------------
File Type 1:   JTextfield1  Browse Button1  ADD ROW BUTTON
               JTextfield2  Browse Button2

File Type 2:   JTextfield3  Browse Button3  ADD ROW BUTTON
               JTextfield4  Browse Button4

File Type 1:   JTextfield5  Browse Button5  ADD ROW BUTTON
               JTextfield6  Browse Button6

При нажатии кнопки ДОБАВИТЬ ВНИЗ новый набор кнопок JTextfield & Browse добавляется в соответствующий раздел типа файла, каждый раздел типа файла являетсяУ Jpanel есть miglayout, но проблема заключается в том, что при добавлении новой строки Jpanel не расширяется, и, таким образом, новая строка отображается только частично, а разделы экрана не сдвигаются вниз.

Как добиться достижениятот же самый.Пожалуйста, помогите.

Раджив Джа

1 Ответ

3 голосов
/ 01 сентября 2011

Я не совсем понимаю, что вам нужно. Но попробуйте этот пример. Он должен делать то, что вы ищете.

enter image description here enter image description here

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class DynaFrame extends JFrame{

    private JPanel basePnl = new JPanel();

    public DynaFrame(){
        this.setTitle("Dynamic panel addition");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //this.setSize(600, 700);
        this.add(getMainPanel());
        this.setLocationRelativeTo(null);
        this.pack();
        this.setVisible(true);
    }

    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new DynaFrame();
            }
        });
    }

    public JPanel getMainPanel(){
        basePnl.setLayout(new BoxLayout(basePnl, BoxLayout.Y_AXIS));
        basePnl.add(getRowPanel());
        return basePnl;
    }

    public JPanel getRowPanel(){
        JPanel pnl = new JPanel();
        GridLayout gLayout = new GridLayout();
        gLayout.setColumns(4);
        gLayout.setRows(1);
        pnl.setLayout(gLayout);
        pnl.add(new JLabel("Filetype"));
        pnl.add(new JTextField());
        pnl.add(new JButton("Browse"));
        JButton addBtn = new JButton("Add");
        addBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                basePnl.add(getRowPanel());
                DynaFrame.this.pack();
            }
        });
        pnl.add(addBtn);
        return pnl;
    }
}
...