Swing Jpanel Autofit 内容问题

发布于 2024-12-03 01:52:34 字数 593 浏览 0 评论 0原文

我想使用 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

单击 ADD ROW BUTTON 一组新的 JTextfield 和 JTextfield 。浏览按钮被添加到适当的文件类型部分,每个文件类型部分都是一个具有 miglayout 的 Jpanel,但问题是添加新行后,Jpanel 不会展开,因此新行仅部分显示,屏幕下方的部分也会显示不会被推倒。

如何实现同样的目标。 请帮忙。

拉吉夫·贾

I want to achieve following screen design using 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

On click of ADD ROW BUTTON a new set of JTextfield & Browse Button gets added at appropriate file type section,Each file type section is a Jpanel having miglayout, but the problem is Upon addition of new row the Jpanel does not expand and thus new row shows up only partially and the sections dowm of the screen does not gets pushed down.

How to go about achieving the same.
Please help.

Rajiv Jha

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

勿挽旧人 2024-12-10 01:52:34

我不太明白你需要什么。但请尝试一下这个例子。它应该做你正在寻找的事情。

在此处输入图像描述
在此处输入图像描述

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;
    }
}

I don't exactly understand what you need. But try this example out. It should do what you're looking for.

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;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文