首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java奇怪的GroupLayout

java奇怪的GroupLayout
EN

Stack Overflow用户
提问于 2013-11-15 17:05:02
回答 1查看 115关注 0票数 0

这是我的密码:

代码语言:javascript
复制
package darkorbit;

import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.util.concurrent.TimeUnit;

import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;

public class GuiPreparation extends JFrame{

    private JCheckBox cbbt = new JCheckBox("Wait");
    private JTextField tfbt = new JTextField(5);
    private JLabel mbt = new JLabel("-");
    private JTextField tfbt1 = new JTextField(5);
    private JLabel lbt = new JLabel("miliseconds after collecting a box.");

    private JCheckBox cbr = new JCheckBox("Rest");
    private JTextField tfr = new JTextField(5);
    private JLabel mr = new JLabel("-");
    private JTextField tfr1 = new JTextField(5);
    private JLabel lr = new JLabel("seconds every");
    private JTextField tfr2 = new JTextField(5);
    private JLabel mr1 = new JLabel("-");
    private JTextField tfr3 = new JTextField(5);
    private JLabel lr1 = new JLabel("minutes.");

    private JButton startBotting = new JButton("Start Botting");
    private int controlWidth = 500;
    private int controlHeight = 600;

    GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
    int screenWidth = gd.getDisplayMode().getWidth();
    int screenHeight = gd.getDisplayMode().getHeight();

    private GuiPreparation(){

        setVisible(true);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(screenWidth / 2 - controlWidth / 2, screenHeight / 2 - controlHeight / 2, controlWidth, controlHeight);

        eventStartBotting startBottingEvent = new eventStartBotting();

        startBotting.addActionListener(startBottingEvent);
        //startBotting.setBounds(controlWidth / 2 - 100 / 2, controlHeight - 70, 100, 30);


        //Layout

        add(startBotting);
        add(cbbt);
        add(tfbt);
        add(mbt);
        add(tfbt1);
        add(lbt);

        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);

        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        layout.setHorizontalGroup(
                layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER)
                        .addComponent(cbbt))
                        .addComponent(tfbt)
                        .addComponent(mbt)
                        .addComponent(tfbt1)
                        .addComponent(lbt)
                );

        layout.setVerticalGroup(
                layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER)
                        .addComponent(cbbt)
                        .addComponent(tfbt)
                        .addComponent(mbt)
                        .addComponent(tfbt1)
                        .addComponent(lbt))
                );

        layout.linkSize(SwingConstants.VERTICAL, tfbt);
        layout.linkSize(SwingConstants.VERTICAL, tfbt1);


        //Layout1

        add(cbr);
        add(tfr);
        add(mr);
        add(tfr1);
        add(lr);
        add(tfr2);
        add(mr1);
        add(tfr3);
        add(lr1);


        GroupLayout layout1 = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout1);

        layout1.setAutoCreateGaps(true);
        layout1.setAutoCreateContainerGaps(true);

        layout1.setHorizontalGroup(
                layout1.createSequentialGroup()
                .addGroup(layout1.createParallelGroup(GroupLayout.Alignment.CENTER)
                        .addComponent(cbr))
                        .addComponent(tfr)
                        .addComponent(mr)
                        .addComponent(tfr1)
                        .addComponent(lr)
                        .addComponent(tfr2)
                        .addComponent(mr1)
                        .addComponent(tfr3)
                        .addComponent(lr1)
                );

        layout1.setVerticalGroup(
                layout1.createSequentialGroup()
                .addGap(50)
                .addGroup(layout1.createParallelGroup(GroupLayout.Alignment.CENTER)
                        .addComponent(cbr)
                        .addComponent(tfr)
                        .addComponent(mr)
                        .addComponent(tfr1)
                        .addComponent(lr)
                        .addComponent(tfr2)
                        .addComponent(mr1)
                        .addComponent(tfr3)
                        .addComponent(lr1))
                );

        layout1.linkSize(SwingConstants.VERTICAL, tfr);
        layout1.linkSize(SwingConstants.VERTICAL, tfr1);
        layout1.linkSize(SwingConstants.VERTICAL, tfr2);
        layout1.linkSize(SwingConstants.VERTICAL, tfr3);

    }

    public class eventStartBotting implements ActionListener {
        public void actionPerformed(ActionEvent startBottingActionEvent) {
            System.out.println("Event Start Botting");
            startBotting.setEnabled(false);

            GuiBotting.openGui();

            setVisible(false);
            dispose();

        }
    }

    public static void openGui() {
        GuiPreparation mainGUI = new GuiPreparation();
        mainGUI.setVisible(true);
    }

}

因此,当我运行gui (openGui())时,它运行得很顺利,我得到了我想要的:

但是,我更改(例如)setReziseable(真)而不是false,并运行它,我得到如下结果:

当我把它放回原处时,我得到了同样的感觉。

为了再次得到我想要的gui,我必须按Ctrl+z,直到它恢复到原来的样子为止。

有时候,即使我没有改变任何东西,我也会得到一个奇怪的

这些都是例子,你可以通过改变任何东西来得到这些奇怪的东西,即使代码完全相同,也会得到不同的结果。

这是两个布局的使用吗?是因为它没有正确关闭吗?如果重要的话,我使用Eclipse。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-15 18:13:53

我没有得到你的第一张照片,无论大小的设置。

添加组件的次数太多了--在将组件添加到GroupLayout布局(一次是水平的,一次是垂直的)之后,它们也不需要添加到内容窗格--删除所有不使用GroupLayout的add()方法。

而且,一次只有一个布局连接到您的JFrame --当您将layout1设置为内容窗格布局时,您将替换以前设置的布局。要么将所有组件放在一个布局中,要么为两个垂直部分中的每一个设置一个JPanel,设置为GroupLayout,然后将两个JPanels放到另一个JPanel中,然后将这个JPanels设置为JFrame的中心(您可以将其中一个放置向北,一个中心,但如果允许用户更改帧大小,则它们会不同地拉伸)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20006627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档