Java Swing 游戏:JFrame 未显示
JavaSwing Game: JFrame not showing
我正在尝试编写一个简单的游戏。我处于一切的开始,我的目标是创建一个可以听我键盘的盒子。试图在 JPanel 中绘制一个框时,JFrame 启动并在 3 秒内关闭。有人可以帮忙吗?我迷失在 Java Swing JFrame、JPanel 的情况下。
package abbygail;
public class Abbygail {
public static void main(String[] args) {
GUI gui = new GUI();
}
}
不同class:
package abbygail;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUI extends JFrame {
public GUI(){
setSize(640, 480);
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
Game_Board brd = new Game_Board();
setContentPane(brd);
getContentPane().setLayout(null);
}
}
不同class:
package abbygail;
import javax.swing.JPanel;
public class Game_Board extends JPanel{
public Game_Board(){
setSize(640, 480);
Blue_Box blbx = new Blue_Box();
add(blbx);
}
}
不同class:
package abbygail;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;
public class Blue_Box extends JPanel{
/**
*
* @param g
*/
private Point p1 = new Point(100, 100);
private Point p2 = new Point(540, 380);
public Blue_Box(){
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.blue);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setStroke(new BasicStroke(8,BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
g2d.draw(new Rectangle2D.Double(p1.x, p1.y, 40, 30));
}
}
您永远不会在 GUI 实例上调用 setVisible(true);
。
所以:
public class Abbygail {
public static void main(String[] args) {
GUI gui = new GUI();
gui.setVisible(true);
}
}
此外,关于您使用空布局的一个小问题,虽然空布局和 setBounds()
可能对 Swing 新手来说是创建复杂 GUI 的最简单和最好的方法,您创建的 Swing GUI 越多使用它们时你会 运行 遇到更严重的困难。它们不会在 GUI 调整大小时调整您的组件的大小,它们是皇家 来增强或维护,它们在放置在滚动窗格中时完全失败,它们在所有平台或屏幕分辨率上查看时看起来 gawd-awful和原来的不一样。
关于你的蓝框 -- 你的 Blue_Box JPanel 的大小为 0, 0。给它一个 getPreferredSize 方法和 return 合适的大小:
public class Blue_Box extends JPanel {
private static final int PREF_W = 640;
private static final int PREF_H = 480;
private Point p1 = new Point(100, 100);
private Point p2 = new Point(540, 380);
public Blue_Box() {
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.blue);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setStroke(new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
g2d.draw(new Rectangle2D.Double(p1.x, p1.y, 40, 30));
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}
}
并摆脱空布局
我正在尝试编写一个简单的游戏。我处于一切的开始,我的目标是创建一个可以听我键盘的盒子。试图在 JPanel 中绘制一个框时,JFrame 启动并在 3 秒内关闭。有人可以帮忙吗?我迷失在 Java Swing JFrame、JPanel 的情况下。
package abbygail;
public class Abbygail {
public static void main(String[] args) {
GUI gui = new GUI();
}
}
不同class:
package abbygail;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUI extends JFrame {
public GUI(){
setSize(640, 480);
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
Game_Board brd = new Game_Board();
setContentPane(brd);
getContentPane().setLayout(null);
}
}
不同class:
package abbygail;
import javax.swing.JPanel;
public class Game_Board extends JPanel{
public Game_Board(){
setSize(640, 480);
Blue_Box blbx = new Blue_Box();
add(blbx);
}
}
不同class:
package abbygail;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;
public class Blue_Box extends JPanel{
/**
*
* @param g
*/
private Point p1 = new Point(100, 100);
private Point p2 = new Point(540, 380);
public Blue_Box(){
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.blue);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setStroke(new BasicStroke(8,BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
g2d.draw(new Rectangle2D.Double(p1.x, p1.y, 40, 30));
}
}
您永远不会在 GUI 实例上调用 setVisible(true);
。
所以:
public class Abbygail {
public static void main(String[] args) {
GUI gui = new GUI();
gui.setVisible(true);
}
}
此外,关于您使用空布局的一个小问题,虽然空布局和 setBounds()
可能对 Swing 新手来说是创建复杂 GUI 的最简单和最好的方法,您创建的 Swing GUI 越多使用它们时你会 运行 遇到更严重的困难。它们不会在 GUI 调整大小时调整您的组件的大小,它们是皇家 来增强或维护,它们在放置在滚动窗格中时完全失败,它们在所有平台或屏幕分辨率上查看时看起来 gawd-awful和原来的不一样。
关于你的蓝框 -- 你的 Blue_Box JPanel 的大小为 0, 0。给它一个 getPreferredSize 方法和 return 合适的大小:
public class Blue_Box extends JPanel {
private static final int PREF_W = 640;
private static final int PREF_H = 480;
private Point p1 = new Point(100, 100);
private Point p2 = new Point(540, 380);
public Blue_Box() {
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.blue);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setStroke(new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
g2d.draw(new Rectangle2D.Double(p1.x, p1.y, 40, 30));
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}
}
并摆脱空布局