Java 如何改变车道位置?
我尝试创建一些窗口应用程序。我有一个容器,它由一个JFrame和两个JPanel组成(白色正方形和红色正方形,最后一个正方形在白色正方形内) 我想要改变位置的红方块(我的工作窗口上的任何位置(例如,左侧或右侧))。我试过了,但没有成功 你能帮我吗 这是我的密码)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
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行,帮助我了解网络情况。。。我想在我的程序中为我将来添加的新监控行创建几个空白位置。(请解释您的代码示例和代码的作用)(请解释您的代码示例和代码的作用)