如何更改JPlane位置?

问题描述 投票:0回答:4

我尝试创建一些窗口应用程序。我有一个包含一个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

java swing jframe jpanel
4个回答
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
投票

[您可以使用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);

1
投票

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


0
投票

感谢大家的帮助!!!我尝试了所有答案并解决了问题。解决问题的最简单方法是FlowLayout,但是如果您需要在桌面上放置许多对象,则不同的答复会更好。

© www.soinside.com 2019 - 2024. All rights reserved.