Как изменить размер Swing JFrame на лету - PullRequest
2 голосов
/ 03 декабря 2011

Я пытаюсь достичь

  1. Создать пользовательский компонент (mypanel), который расширяет JPanel с JLabel с и JButton с в нем, упорядоченными черезGridBagLayout.

  2. Имеет JFrame, который будет отображать несколько mypanel в вертикальной стопке и соответственно изменять его высоту в зависимости от количества добавленных mypanel вit (ширина JFrame = ширина mypanel).

  3. Когда высота JFrame становится больше высоты экрана, для прокрутки появляется вертикальная полоса прокрутки

Я успешно создал mypanel, но у меня много проблем с добавлением к JFrame и настройкой его размера, часть полосы прокрутки.

это коддля моего jframe

    this.window = new JFrame("ADesktop Notifications");
    this.window_panel = new JPanel();
    this.window_panel_scroll = new JScrollPane(this.window_panel);

    this.window.setBounds(this.top_left_x,this.top_left_y, this.width, this.height);
    this.window_panel.setLayout(new FlowLayout());
    this.window_panel.setAutoscrolls(true);
    this.window.add(this.window_panel);

1 Ответ

2 голосов
/ 03 декабря 2011

Попробуйте этот пример (для динамического расширения JFrame).

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...