如何更改JPlane位置?

时间:2019-12-07 22:09:57

标签: java swing jframe jpanel

我尝试创建一些窗口应用程序。我有一个包含一个JFrame和两个JPanel的容器(白方块和红方块。白方块里面的最后一个方块)。

我想将位置更改为红色正方形(工作窗口上的任意位置(例如,左侧或右侧))。我曾尝试这样做,但没有成功。

你能帮我吗?

这是我的代码)

import java.awt.*;


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

public class main_window extends JFrame {  


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



        JFrame frame = new JFrame();  


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

        frame.getContentPane().setLayout(new GridLayout(1, 1));

        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);

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

} 

enter image description here

3 个答案:

答案 0 :(得分:1)

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);
        }

    }
}

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

先看看How to Use GridBagLayout

答案 1 :(得分:1)

您可以使用UICloudSharingController来控制红色正方形的位置。我将布局设置为白色背景的外部面板,以控制内部面板FlowLayout的位置(红色正方形)。检查我的答案。

panel_1

答案 2 :(得分:1)

您需要执行一些操作才能移动正方形,例如我在代码中添加了一个按钮,单击该按钮将导致正方形移动。为了使按钮执行某些操作,您需要实现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);
    }
}

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