【问题标题】:How to resize a JFrame so that the components also expand or reduce in size, depending on user?如何调整 JFrame 的大小以使组件的大小也根据用户扩大或缩小?
【发布时间】:2016-08-08 11:00:31
【问题描述】:

我将使用下面的图片来解释我的观点:

这个项目执行的例子:

如您所见,用户重新调整了框架的大小,然后它不会扩展组件本身,而是用灰色填充它:

我想知道如何调整 JFrame 的大小以制作其中的组件 框架的大小取决于用户。

这是这个程序的主类,我使用的是GridBag布局,在有人指出之前我明白setSize函数可以被管理者覆盖,只有在编写这个程序后才能实现。

请注意,这实际上是一个项目,这只是我以前使用过的另一个程序,我只是想知道如何去做。

public class Email{

    public static void main(String[] args) {
        // The GUI thread is created, with the JFrame in the run method
        SwingUtilities.invokeLater(new Runnable(){

             public void run(){

                JFrame frame = new Compose("Send an Email");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setSize(700 , 600);
                // This stops the program from being resized
                frame.setResizable(true);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }

}

【问题讨论】:

  • 在您的设计中使用 flowLayout 您是在编码设计还是从 IDE 构建
  • 我没有使用 GUI 构建器或任何其他工具,而是手动编码。使用 flowLayout 也不适合我的程序,除了如果我最大化屏幕,它只会将它们添加到第一行而不是相应地调整大小。

标签: java swing user-interface resize jframe


【解决方案1】:

看起来您正在使用GridBagLayout。所以你需要修改你的约束以获得你想要的效果。

查看 How to Use GridBagLayout 上的 Swing 教程部分。

您尤其需要查看 weightx/weighty 约束。这告诉布局如何随着帧大小的变化分配空间。因为您的值为 0,所以不会调整任何组件的大小,并且组件会显示在中心。我猜你想调整文本字段的大小。

所以阅读教程,下载演示代码并使用它。然后修改你的布局来做你想做的事。

【讨论】:

  • 对,所以我的内容窗格使用边框布局,而我的其他面板使用其他几种不同的布局,那我该怎么做呢?
  • 阅读教程。它解释了所有布局管理器是如何工作的。这就是我向您指出本教程的原因。您首先学习每个布局管理器的基础知识。您嵌套面板并使用适当的布局管理器。根据您发布的图片,您似乎正在使用 GridBagLayout,所以这就是我建议您从那里开始的原因。根据图片,我建议您可以使用 GridBagLayout 轻松完成。我不知道你可能在使用什么其他布局,所以我显然无法评论你在做什么,因为我不是读心者。
  • 你不是读心者,但正如我已经说过的,我正在为我的其他程序使用边框布局并想要一些特定的东西。
  • 祝你好运,我无能为力,因为您的要求毫无意义。 BorderLayout 不适用于显示 10 个单独的组件。
  • 不,BorderLayout 用于在内容窗格中显示所有 JPanel 在所述侧面。所以我可以有各种 JPanel,其中有不同的组件,比如一个用于菜单栏,另一个面板用于将缓冲图像和文本字段等两个东西放在一起。
【解决方案2】:
import javax.swing.JFrame;
import javax.swing.JLabel;


public class emailjava extends JFrame{

    public emailjava(){
    adjustFrame();
    }




    /**
     * variable declaration
     **/
    private final javax.swing.JLabel bccLbl= new javax.swing.JLabel();
    private final javax.swing.JTextField bccText= new javax.swing.JTextField();
    private final javax.swing.JTextField ccTExt= new javax.swing.JTextField();
    private final javax.swing.JLabel jLabel1= new javax.swing.JLabel();
    private final javax.swing.JLabel jLabel2= new javax.swing.JLabel();
    private final javax.swing.JPanel jPanel1 = new javax.swing.JPanel();
    private final javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane();
    private final javax.swing.JLabel messageLbl= new javax.swing.JLabel();
    private final javax.swing.JTextArea messageText = new javax.swing.JTextArea();
    private final javax.swing.JLabel subjectLbl= new javax.swing.JLabel();
    private final javax.swing.JTextField subjectText= new javax.swing.JTextField();
    private final javax.swing.JTextField toText= new javax.swing.JTextField();
    //emd of the declaration

   public final void adjustFrame(){

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);


        JLabel []array = {jLabel1,jLabel2,bccLbl,subjectLbl,messageLbl};
        for (JLabel jLabel : array) {
           jLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        }

        jLabel1.setText("To :");
        jLabel2.setText("CC :");
        bccLbl.setText("BCC :");
        subjectLbl.setText("SubjectLine");
        messageLbl.setText("MessageBody");

        messageText.setColumns(20);
        messageText.setRows(5);
        jScrollPane1.setViewportView(messageText);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(messageLbl, javax.swing.GroupLayout.DEFAULT_SIZE, 77, Short.MAX_VALUE)
                    .addComponent(subjectLbl, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(bccLbl, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(5, 5, 5)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(toText)
                    .addComponent(ccTExt)
                    .addComponent(bccText)
                    .addComponent(subjectText)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 391, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(35, 35, 35)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(toText, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(ccTExt, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(bccText, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(bccLbl, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(subjectText, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(subjectLbl, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 295, Short.MAX_VALUE)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(messageLbl, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 0, Short.MAX_VALUE))))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();

    }

    public static void main(String[] args) {
        new emailjava().setVisible(true);
    }

}

这是我想出的代码,我自己尝试过,它正在 100% 工作

【讨论】:

  • 谢谢您,抽出时间我会看看这个。
猜你喜欢
  • 1970-01-01
  • 2016-08-18
  • 2013-03-27
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
相关资源
最近更新 更多