java panel 切换_java – 如何在jpanel之间切换?

我仍然是

java编程的新手,所以请帮助我纠正我可能忽略的任何错误或提供有关如何改进此程序的提示.

好的,所以很多问题都解决了,现在我有了一个CardLayout,但我仍然对如何让我的管道显示在里面有疑问.

当我尝试添加刷新率计时器和我的速度计时器时,我遇到了如何声明和初始化布尔变量的问题.

此外,当我编译并运行此游戏时,我会获得诸如Game $1.class之类的文件.有没有办法让我清理它,有人可以解释为什么会这样吗?这些对成品有影响吗? (当游戏编译并打包成JAR时.)

我想在点击播放按钮时将playerIsReady设置为true.从那里,当if语句为真时,然后切换到显示管道的面板,并开始在屏幕上移动管道.最好是3个管道的实例,每个实例在不同的时间开始,但无论你有什么帮助,都可以.

这些代码中的一些需要工作,所以我已经注释了一些部分并留下了注释.

关于这个游戏的其他问题可以在here找到.

这是我目前的代码

Game.java

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.Timer;

import javax.swing.border.EmptyBorder;

import javax.swing.SwingUtilities;

public class Game {

public static void main(String[] args) {

Runnable r = new Runnable() {

@Override

public void run() {

// the GUI as seen by the user (without frame)

final CardLayout cl = new CardLayout();

final JPanel gui = new JPanel(cl);

// remove if no border is needed

gui.setBorder(new EmptyBorder(10,10,10,10));

JPanel menu = new JPanel(new GridBagLayout());

JButton playGame = new JButton("Play!");

ActionListener playGameListener = new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

cl.show(gui, "game");

}

};

playGame.addActionListener(playGameListener);

Insets margin = new Insets(20, 50, 20, 50);

playGame.setMargin(margin);

menu.add(playGame);

gui.add(menu);

cl.addLayoutComponent(menu, "menu");

final JPanel pipes = new Pipes();

gui.add(pipes);

cl.addLayoutComponent(pipes, "game");

JFrame f = new JFrame("Pipes Game");

f.add(gui);

// Ensures JVM closes after frame(s) closed and

// all non-daemon threads are finished

f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

// See https://stackoverflow.com/a/7143398/418556 for demo.

f.setLocationByPlatform(true);

// ensures the frame is the minimum size it needs to be

// in order display the components within it

f.pack();

// should be done last, to avoid flickering, moving,

// resizing artifacts.

f.setVisible(true);

/*if (playerIsReady) {

Timer speed = new Timer(10, new ActionListener() { //pipe speed

@Override

public void actionPerformed(ActionEvent e) {

pipes.move();

}

});

speed.start();

Timer refresh = new Timer(30, new ActionListener() { //refresh rate

@Override

public void actionPerformed(ActionEvent e) {

pipes.repaint();

}

});

refresh.start();

}*/

}

};

// Swing GUIs should be created and updated on the EDT

// http://docs.oracle.com/javase/tutorial/uiswing/concurrency

SwingUtilities.invokeLater(r);

}

}

Pipes.java

// What import(s) do I need for ArrayList?

public class Pipes {

List pipes = new ArrayList();

public Pipes() {

pipes.add(new Pipe(50, 100));

pipes.add(new Pipe(150, 100));

pipes.add(new Pipe(250, 100));

}

protected void paintComponent(Graphics g) {

super.paintComponent(g);

for ( Pipe pipe : pipes ){

pipe.drawPipe(g);

}

}

}

PipeObject.java

import java.awt.Graphics;

public class PipeObject {

//Declare and initialiaze variables

int x1 = 754; //xVal start

int x2 = 75; //pipe width

//total width is 83

int y1 = -1; //yVal start

int y2 = setHeightVal(); //pipe height

int gap = 130; //gap height

public void drawPipe(Graphics g) {

g.clearRect(0,0,750,500); //Clear screen

g.drawRect(x1,y1,x2,y2); //Draw part 1

g.drawRect(x1-3,y2-1,x2+6,25); //Draw part 2

g.drawRect(x1-3,y2+25+gap,x2+6,25); //Draw part 3

g.drawRect(x1,y2+25+gap+25,x2,500-y2-49-gap); //Draw part 4

}

public void move() {

x1--;

}

public int getMyX() { //To determine where the pipe is horizontally

return x1-3;

}

public int getMyY() { //To determine where the pipe is vertically

return y2+25;

}

public int setHeightVal() { //Get a random number and select a preset height

int num = (int)(9*Math.random() + 1);

int val = 0;

if (num == 9)

{

val = 295;

}

else if (num == 8)

{

val = 246;

}

else if (num == 7)

{

val = 216;

}

else if (num == 6)

{

val = 185;

}

else if (num == 5)

{

val = 156;

}

else if (num == 4)

{

val = 125;

}

else if (num == 3)

{

val = 96;

}

else if (num == 2)

{

val = 66;

}

else

{

val = 25;

}

return val;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值