我正在尝试在Swing Java中构建一个布局

时间:2014-04-05 14:41:43

标签: java swing

我正在尝试在java中创建一个应用程序,首先我在GUI中遇到问题。 我把Jpanel放在Jframe中,但是当我使用setMaximumSize时我遇到问题而且我想修复Jpanel的大小,这样即使用户试图改变窗口的大小,jpanel也会保持在中心位置。 我在StackOverflow上试过这个解决方案 How can I properly center a JPanel ( FIXED SIZE ) inside a JFrame? 请指导我。这是我的第一篇文章,我没有足够的声誉来发布图片。谢谢

import javax.swing.*;
import java.awt.*;

 class App_Demo4 extends JFrame {

    public App_Demo4()
    {

        JFrame frm=new JFrame("Application");
        JPanel pane=new JPanel();
        frm.setVisible(true);
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frm.setLayout(new BorderLayout());
        frm.add(pane,BorderLayout.CENTER);
        pane.setSize(400,400);
        Dimension dim=new Dimension(400,400);
         pane.setMinimumSize(dim);


        Box box = new Box(BoxLayout.Y_AXIS);

        box.add(Box.createVerticalGlue());
        box.add(pane);     
        box.add(Box.createVerticalGlue());

        frm.add(box);
        frm.setSize(500,500);

        JButton dbtn1=new JButton("Download File");
        pane.add(dbtn1);
        JTextField txt1=new JTextField(20);
        pane.add(txt1);
        JButton bbtn1=new JButton("Browse");
        pane.add(bbtn1);

        JButton dbtn2=new JButton("Download Mail");
        pane.add(dbtn2);
        JTextField txt2=new JTextField(20);
        pane.add(txt2);
        JButton bbtn2=new JButton("Browse");
        pane.add(bbtn2);

        JButton cbtn1=new JButton("Compile File");
        pane.add(cbtn1);
        JTextField txt3=new JTextField(20);
        pane.add(txt3);
        JButton bbtn3=new JButton("Browse");
        pane.add(bbtn3);

        JButton cbtn2=new JButton("Cancel");
        pane.add(cbtn2,BorderLayout.EAST);


    }
    public static void main(String[] args)
    {
        new App_Demo4();
    }
}

2 个答案:

答案 0 :(得分:1)

请勿尝试设置面板的大小。这是布局管理员的工作。

您需要更改面板的布局管理器。默认情况下,JPanel使用FlowLayout。在这种情况下,组件只会根据框架的宽度流向新的一行。

您可能想要查看GridBagLayout。有关更多信息和示例,请参阅How to Use a GridBagLayout上的Swing教程中的部分。

此外,在装入框架并使框架可见之前,请确保将所有组件添加到框架中。所以你的基本代码应该是:

frame.add(....)l
frame.pack();
frame.setVisible(true);

答案 1 :(得分:-1)

你是怎么做到的:

希望它有所帮助...

import javax.swing.*;
import java.awt.*;

 public class App_Demo4 extends JFrame {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public App_Demo4()
    {

        super("Application");
        JPanel pane=new JPanel();

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setPreferredSize(new Dimension(500,500));

        GridBagLayout gl = new GridBagLayout();
        pane.setLayout(gl);

        GridBagConstraints c = new GridBagConstraints();
        c.weightx = 1;
        c.weighty = 1;
        c.anchor = GridBagConstraints.CENTER;
        c.fill = GridBagConstraints.NONE;
        c.insets = new Insets(6, 6, 6, 6);

        c.gridx = 0;
        c.gridy = 0;

        JButton dbtn1=new JButton("Download File");
        pane.add(dbtn1, c);

        JTextField txt1=new JTextField(20);
        c.gridx = 1;
        pane.add(txt1, c);

        JButton bbtn1=new JButton("Browse");
        c.gridx = 2;
        pane.add(bbtn1, c);

        JButton dbtn2=new JButton("Download Mail");
        c.gridy = 1;
        c.gridx = 0;
        pane.add(dbtn2, c);

        JTextField txt2=new JTextField(20);
        c.gridx = 1;
        pane.add(txt2, c);

        JButton bbtn2=new JButton("Browse");
        c.gridx = 2;
        pane.add(bbtn2, c);

        c.gridy = 2;
        c.gridx = 0;
        JButton cbtn1=new JButton("Compile File");
        pane.add(cbtn1, c);

        JTextField txt3=new JTextField(20);
        c.gridx = 1;
        pane.add(txt3, c);

        JButton bbtn3=new JButton("Browse");
        c.gridx = 2;
        pane.add(bbtn3, c);

        c.gridy = 3;
        c.gridx = 2;
        JButton cbtn2=new JButton("Cancel");
        pane.add(cbtn2,c);

        this.add(pane);
        this.pack();
        this.setVisible(true);

    }
    public static void main(String[] args)
    {

        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                 new App_Demo4();
            }
        });

    }
}