Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何改变车道位置?_Java_Swing_Jframe_Jpanel - Fatal编程技术网

Java 如何改变车道位置?

Java 如何改变车道位置?,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我尝试创建一些窗口应用程序。我有一个容器,它由一个JFrame和两个JPanel组成(白色正方形和红色正方形,最后一个正方形在白色正方形内) 我想要改变位置的红方块(我的工作窗口上的任何位置(例如,左侧或右侧))。我试过了,但没有成功 你能帮我吗 这是我的密码) GridBagLayout将为您提供对布局本身的最大控制 例如 import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import j

我尝试创建一些窗口应用程序。我有一个容器,它由一个JFrame和两个JPanel组成(白色正方形和红色正方形,最后一个正方形在白色正方形内)

我想要改变位置的红方块(我的工作窗口上的任何位置(例如,左侧或右侧))。我试过了,但没有成功

你能帮我吗

这是我的密码)


GridBagLayout
将为您提供对布局本身的最大控制

例如

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test {

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

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setBackground(Color.WHITE);
            setLayout(new GridBagLayout());

            JPanel pane = new JPanel() {
                @Override
                public Dimension getPreferredSize() {
                    return new Dimension(50, 50);
                }
            };
            pane.setBackground(Color.RED);

            GridBagConstraints gbc = new GridBagConstraints();
            gbc.weightx = 1;
            gbc.weighty = 1;
            // Left
            //gbc.anchor = GridBagConstraints.WEST;
            // Right
            //gbc.anchor = GridBagConstraints.EAST;
            // Top
            //gbc.anchor = GridBagConstraints.NORTH;
            // Bottom
            //gbc.anchor = GridBagConstraints.SOUTH;
            // Top/left
            //gbc.anchor = GridBagConstraints.NORTHWEST;
            // Top/Right
            //gbc.anchor = GridBagConstraints.NORTHEAST;
            // Bottom/left
            //gbc.anchor = GridBagConstraints.SOUTHHWEST;
            // Bottom/Right
            //gbc.anchor = GridBagConstraints.SOUTHEAST;
            // Middle
            gbc.anchor = GridBagConstraints.CENTER;

            add(pane, gbc);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(400, 400);
        }

    }
}
它也是最复杂的布局管理器,因此可能需要一些时间和实验才能使其正确


首先看一看

GridBagLayout
将为您提供对布局本身最大程度的控制

例如

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test {

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

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setBackground(Color.WHITE);
            setLayout(new GridBagLayout());

            JPanel pane = new JPanel() {
                @Override
                public Dimension getPreferredSize() {
                    return new Dimension(50, 50);
                }
            };
            pane.setBackground(Color.RED);

            GridBagConstraints gbc = new GridBagConstraints();
            gbc.weightx = 1;
            gbc.weighty = 1;
            // Left
            //gbc.anchor = GridBagConstraints.WEST;
            // Right
            //gbc.anchor = GridBagConstraints.EAST;
            // Top
            //gbc.anchor = GridBagConstraints.NORTH;
            // Bottom
            //gbc.anchor = GridBagConstraints.SOUTH;
            // Top/left
            //gbc.anchor = GridBagConstraints.NORTHWEST;
            // Top/Right
            //gbc.anchor = GridBagConstraints.NORTHEAST;
            // Bottom/left
            //gbc.anchor = GridBagConstraints.SOUTHHWEST;
            // Bottom/Right
            //gbc.anchor = GridBagConstraints.SOUTHEAST;
            // Middle
            gbc.anchor = GridBagConstraints.CENTER;

            add(pane, gbc);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(400, 400);
        }

    }
}
它也是最复杂的布局管理器,因此可能需要一些时间和实验才能使其正确


首先看一下您可以使用
FlowLayout
来控制红方块的位置。我已将布局设置为带有白色背景的外部面板,以控制内部面板
面板_1
的位置,即红方块。请检查我的答案

       JFrame frame = new JFrame();  

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setBackground(Color.black);

        JPanel panel = new JPanel();
        panel.setBackground(Color.WHITE);

        frame.getContentPane().add(panel);
        JPanel panel_1 = new JPanel();

        panel_1.setPreferredSize(new Dimension(200, 200));
        panel_1.setBackground(Color.red); 

        panel.add(panel_1);

        //FlowLayout.RIGHT, LEFT, CENTER
        panel.setLayout(new FlowLayout(FlowLayout.RIGHT)); 

        frame.setSize(800,800); 
        frame.setVisible(true);

您可以使用
FlowLayout
控制红方块的位置。我已将布局设置为带有白色背景的外部面板,以控制内部面板
panel_1
的位置,即红方块。请检查我的答案

       JFrame frame = new JFrame();  

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setBackground(Color.black);

        JPanel panel = new JPanel();
        panel.setBackground(Color.WHITE);

        frame.getContentPane().add(panel);
        JPanel panel_1 = new JPanel();

        panel_1.setPreferredSize(new Dimension(200, 200));
        panel_1.setBackground(Color.red); 

        panel.add(panel_1);

        //FlowLayout.RIGHT, LEFT, CENTER
        panel.setLayout(new FlowLayout(FlowLayout.RIGHT)); 

        frame.setSize(800,800); 
        frame.setVisible(true);

您需要执行一些操作才能移动正方形,例如,我在代码中添加了一个按钮,单击该按钮将导致正方形移动。要让按钮执行某些操作,您需要实现
ActionListener
。正如您在
actionPerformed
方法中所看到的,我正在生成矩形左上角的随机x和y坐标,并使用方法
setBounds
设置新坐标。请注意,当矩形移动到新坐标时,我保持了相同的宽度和高度

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainWindow extends JFrame implements ActionListener {
    JPanel panel, panel_1;
    JButton btnMoveSquare;
    Random random;
    MainWindow() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setBackground(Color.black);
        getContentPane().setLayout(new GridLayout(1, 1));

        panel = new JPanel();
        panel.setBackground(Color.WHITE);

        getContentPane().add(panel);
        panel_1 = new JPanel();

        panel_1.setPreferredSize(new Dimension(200, 200));
        panel_1.setBackground(Color.red);

        panel.add(panel_1);

        btnMoveSquare = new JButton("Move Square");
        btnMoveSquare.addActionListener(this);
        panel.add(btnMoveSquare);

        setSize(800, 800);
        random = new Random();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        int x = random.nextInt(800);
        int y = random.nextInt(800);
        panel_1.setBounds(x, y, panel_1.getWidth(), panel_1.getHeight());
    }

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

如果您对代码有任何疑问,请随时发表意见。

您需要执行一些操作以移动方块,例如,我在代码中添加了一个按钮,单击该按钮将导致方块移动。要让按钮执行某些操作,您需要实现
ActionListener
。正如您在
actionPerformed
方法中所看到的,我正在生成矩形左上角的随机x和y坐标,并使用方法
setBounds
设置新坐标。请注意,当矩形移动到新坐标时,我保持了相同的宽度和高度

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainWindow extends JFrame implements ActionListener {
    JPanel panel, panel_1;
    JButton btnMoveSquare;
    Random random;
    MainWindow() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setBackground(Color.black);
        getContentPane().setLayout(new GridLayout(1, 1));

        panel = new JPanel();
        panel.setBackground(Color.WHITE);

        getContentPane().add(panel);
        panel_1 = new JPanel();

        panel_1.setPreferredSize(new Dimension(200, 200));
        panel_1.setBackground(Color.red);

        panel.add(panel_1);

        btnMoveSquare = new JButton("Move Square");
        btnMoveSquare.addActionListener(this);
        panel.add(btnMoveSquare);

        setSize(800, 800);
        random = new Random();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        int x = random.nextInt(800);
        int y = random.nextInt(800);
        panel_1.setBounds(x, y, panel_1.getWidth(), panel_1.getHeight());
    }

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

如果您对代码有任何疑问,请随时发表评论。

您可能需要使用具有更多选项的不同布局管理器,例如
GridBagLayout
,例如我尝试过,但这非常困难(我无法正常设置GridBagLayout)。也许,存在不同的方法来解决我的问题?你的问题的答案将在很大程度上取决于你想要实现什么,“为什么”你需要改变面板的位置为什么不简单地在所有的东西上画画,然后移动面板中的数字?(通过再次绘制它们)我正在尝试为我的工作开发一些应用程序(监控网络程序)。我需要创建2-3行,帮助我了解网络情况。。。我想在我的程序中为我将来添加的新监控行创建几个空位置。您可能需要使用具有更多选项的不同布局管理器,例如
GridBagLayout
,我尝试过,但非常困难(我无法正常设置GridBagLayout)。也许,存在不同的方法来解决我的问题?你的问题的答案将在很大程度上取决于你想要实现什么,“为什么”你需要改变面板的位置为什么不简单地在所有的东西上画画,然后移动面板中的数字?(通过再次绘制它们)我正在尝试为我的工作开发一些应用程序(监控网络程序)。我需要创建2-3行,帮助我了解网络情况。。。我想在我的程序中为我将来添加的新监控行创建几个空白位置。(请解释您的代码示例和代码的作用)(请解释您的代码示例和代码的作用)