Java 画图和 JButton
Java Paint and JButton
我正在尝试创建一个带有按钮的 JFrame,当我单击它时,球会出现在左上角。然后,如果我再次单击它,x、y 位置会改变并且它会移动。问题是我似乎无法在单击按钮后让球出现在 JFrame 上。只有按钮出现了。
我的源代码:
package prac;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Prac extends JComponent {
private int x = 0;
private int y = 0;
private void moveBall() {
x = x + 1;
y = y + 1;
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.fillOval(x, y, 50, 50);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Sample Frame");
JPanel buttonPanel = new JPanel();
JButton moves = new JButton("Click to move ball");
Prac game = new Prac();
buttonPanel.add(moves);
frame.setSize(500, 500);
frame.add(game);
frame.add(buttonPanel);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
moves.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent action) {
game.moveBall();
game.repaint();
}
});
}
}
谢谢
在创建 Prac
对象后添加此行。
Prac game = new Prac();
game.setSize(500, 500);
结果:
您应该覆盖 paint 组件而不是 paint()。
此外,您应该将组件添加到 Jframe 的内容窗格而不是 JFRAME 本身。
很可能是您的组件尺寸不合适。我会建议:
JFrame frame = new JFrame("Sample Frame");
JPanel buttonPanel = new JPanel();
JButton moves = new JButton("Click to move ball");
Prac game = new Prac();
buttonPanel.add(moves);
frame.setSize(500, 500);
Container c = frame.getContentPane ();
c.setLayout (new BorderLayout ());
c.add(game, BorderLayout.CENTER);
c.add(buttonPanel, BorderLayout.NORTH);
这将导致您的 game
组件在大部分框架上展开。
我正在尝试创建一个带有按钮的 JFrame,当我单击它时,球会出现在左上角。然后,如果我再次单击它,x、y 位置会改变并且它会移动。问题是我似乎无法在单击按钮后让球出现在 JFrame 上。只有按钮出现了。
我的源代码:
package prac;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Prac extends JComponent {
private int x = 0;
private int y = 0;
private void moveBall() {
x = x + 1;
y = y + 1;
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.fillOval(x, y, 50, 50);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Sample Frame");
JPanel buttonPanel = new JPanel();
JButton moves = new JButton("Click to move ball");
Prac game = new Prac();
buttonPanel.add(moves);
frame.setSize(500, 500);
frame.add(game);
frame.add(buttonPanel);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
moves.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent action) {
game.moveBall();
game.repaint();
}
});
}
}
谢谢
在创建 Prac
对象后添加此行。
Prac game = new Prac();
game.setSize(500, 500);
结果:
您应该覆盖 paint 组件而不是 paint()。
此外,您应该将组件添加到 Jframe 的内容窗格而不是 JFRAME 本身。
很可能是您的组件尺寸不合适。我会建议:
JFrame frame = new JFrame("Sample Frame");
JPanel buttonPanel = new JPanel();
JButton moves = new JButton("Click to move ball");
Prac game = new Prac();
buttonPanel.add(moves);
frame.setSize(500, 500);
Container c = frame.getContentPane ();
c.setLayout (new BorderLayout ());
c.add(game, BorderLayout.CENTER);
c.add(buttonPanel, BorderLayout.NORTH);
这将导致您的 game
组件在大部分框架上展开。