如何将 JPanel 添加到 JFrame 的中心?
How to add a JPanel to the center of a JFrame?
我尝试创建一个 JFrame,其中有一个 JPanel(包含一个圆圈),它的边界是四个按钮(北、南、东、西)。圆圈将按照按下的按钮指示的方向移动。
我的问题是我无法将我的 JPanel 放在中心:
JFrame 的 class 看起来像这样:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class Frame extends JFrame implements ActionListener {
JButton north, south, east, west;
int x = 10, y = 10;
MyPanel panel;
public Frame() {
setLayout(new BorderLayout());
panel = new MyPanel();
panel.setBackground(Color.MAGENTA);
north = new JButton("NORTH");
south = new JButton("SOUTH");
east = new JButton("EAST");
west = new JButton("WEST");
add(panel, BorderLayout.CENTER);
add(north, BorderLayout.NORTH);
add(south, BorderLayout.SOUTH);
add(east, BorderLayout.EAST);
add(west, BorderLayout.WEST);
north.addActionListener(this);
south.addActionListener(this);
east.addActionListener(this);
west.addActionListener(this);
setBounds(100, 100, 300, 300);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == north) {
y -= 3;
panel.setY(y);
panel.repaint();
}
if (e.getSource() == south) {
y += 3;
panel.setY(y);
panel.repaint();
}
if (e.getSource() == east) {
x += 3;
panel.setX(x);
panel.repaint();
}
if (e.getSource() == west) {
x -= 3;
panel.setX(x);
panel.repaint();
}
}
}
MyPanel class 看起来像这样:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class MyPanel extends JPanel {
private Color color = Color.CYAN;
private int x = 10, y = 10;
public void paint(Graphics g) {
super.paintComponent(g);
g.setColor(color);
g.fillOval(x, y, 20, 20);
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
不要覆盖自定义面板的 getX()
和 getY()
方法。 Swing 使用这些方法来确定组件的位置。
相反,您应该使用 setCirleX(...)
、setCircleY(...)
、getCircleX()
和 getCircleY()
.
等方法
我尝试创建一个 JFrame,其中有一个 JPanel(包含一个圆圈),它的边界是四个按钮(北、南、东、西)。圆圈将按照按下的按钮指示的方向移动。
我的问题是我无法将我的 JPanel 放在中心:
JFrame 的 class 看起来像这样:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class Frame extends JFrame implements ActionListener {
JButton north, south, east, west;
int x = 10, y = 10;
MyPanel panel;
public Frame() {
setLayout(new BorderLayout());
panel = new MyPanel();
panel.setBackground(Color.MAGENTA);
north = new JButton("NORTH");
south = new JButton("SOUTH");
east = new JButton("EAST");
west = new JButton("WEST");
add(panel, BorderLayout.CENTER);
add(north, BorderLayout.NORTH);
add(south, BorderLayout.SOUTH);
add(east, BorderLayout.EAST);
add(west, BorderLayout.WEST);
north.addActionListener(this);
south.addActionListener(this);
east.addActionListener(this);
west.addActionListener(this);
setBounds(100, 100, 300, 300);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == north) {
y -= 3;
panel.setY(y);
panel.repaint();
}
if (e.getSource() == south) {
y += 3;
panel.setY(y);
panel.repaint();
}
if (e.getSource() == east) {
x += 3;
panel.setX(x);
panel.repaint();
}
if (e.getSource() == west) {
x -= 3;
panel.setX(x);
panel.repaint();
}
}
}
MyPanel class 看起来像这样:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class MyPanel extends JPanel {
private Color color = Color.CYAN;
private int x = 10, y = 10;
public void paint(Graphics g) {
super.paintComponent(g);
g.setColor(color);
g.fillOval(x, y, 20, 20);
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
不要覆盖自定义面板的 getX()
和 getY()
方法。 Swing 使用这些方法来确定组件的位置。
相反,您应该使用 setCirleX(...)
、setCircleY(...)
、getCircleX()
和 getCircleY()
.