如何根据用户调整JFrame的大小以使组件的大小扩大或缩小?

时间:2016-04-16 13:13:32

标签: java swing user-interface resize jframe

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

这个例子执行了项目:

http://i.stack.imgur.com/s1nLH.png

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

http://i.stack.imgur.com/kdNA3.png

我想知道如何重新调整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);
            }
        });
    }

}

2 个答案:

答案 0 :(得分:2)

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

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

特别需要考虑weightx / weighty限制。这告诉布局如何在帧大小更改时分配空间。由于您的值为0,因此没有任何组件调整大小,组件显示在中心。我猜你想要文本字段调整大小。

请阅读教程,下载演示代码并使用它。然后修改您的布局以执行您想要的操作。

答案 1 :(得分:0)

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%工作