我尝试创建一些窗口应用程序。我有一个包含一个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);
}
}
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
来控制红色正方形的位置。我已将具有白色背景的外部面板的布局设置为控制内部面板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
方法设置新坐标。请注意,当矩形移动到新坐标时,我保持了矩形的宽度和高度。
感谢大家的帮助!!!我尝试了所有答案并解决了问题。解决问题的最简单方法是FlowLayout
,但是如果您需要在桌面上放置许多对象,则不同的答复会更好。