gpt4 book ai didi

java - CardLayout 输入问题 Java

转载 作者:行者123 更新时间:2023-11-30 04:03:05 27 4
gpt4 key购买 nike

对于我正在制作的游戏,我正在尝试制作一个带有播放按钮的简单标题屏幕,按下该按钮即可开始游戏。我听说卡片布局最适合这种情况,但现在我由于某种原因实现了它,我对游戏的输入被忽略了。这是问题的简化版本,感谢您的帮助。

MainFrame.java

//package panels.examples;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MainFrame extends JFrame implements ActionListener
{
JPanel headerPanel;
JPanel bodyPanel;
JPanel panel1,panel2;
JButton button1,button2;
Container con;
CardLayout clayout;
public MainFrame()
{
//con=getContentPane();
clayout=new CardLayout();
headerPanel=new JPanel();
bodyPanel=new JPanel(clayout);

button1=new JButton("button1");
button2=new JButton("button2");


//add three buttons to headerPanel
headerPanel.add(button1);
headerPanel.add(button2);


button1.addActionListener(this);
button2.addActionListener(this);


panel1=new JPanel();
panel1.add(new JLabel("Panel1"));
panel1.setBackground(Color.pink);
panel2=new PrizePanel();
panel2.add(new JLabel("Panel2"));
panel2.setBackground(Color.gray);

//add above three panels to bodyPanel
bodyPanel.add(panel1,"one");
bodyPanel.add(panel2,"two");


setLayout(new BorderLayout());
setSize(800,400);
add(headerPanel,BorderLayout.NORTH);
add(bodyPanel,BorderLayout.CENTER);
// headerPanel.setBounds(0,0,600,100);
bodyPanel.setBounds(0,100, 600, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);



}

public static void main(String args[])
{
new MainFrame();
}

public void actionPerformed(ActionEvent e) {

if(e.getSource()==button1)
{
clayout.show(bodyPanel, "one");
}

else if(e.getSource()==button2)
{
clayout.show(bodyPanel, "two");
}

}

}

PrizePanel.java

//INCLUDE
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.IOException;

//CLASS
public class PrizePanel extends JPanel {

//DECLARATION
private static final int FRAMEX = 800;
private static final int FRAMEY = 400;
private static final Color BACKGROUND = new Color(204, 204, 204);
private BufferedImage myImage;
private Graphics myBuffer;

private Player pd;


private Timer t;
int points = 0;





//CONSTRUCTOR
public PrizePanel()
{
myImage = new BufferedImage(FRAMEX, FRAMEY, BufferedImage.TYPE_INT_RGB);
myBuffer = myImage.getGraphics();
myBuffer.setColor(BACKGROUND);
myBuffer.fillRect(0, 0, FRAMEX,FRAMEY);

int xPos = (int)(Math.random()*(FRAMEX-100) + 50);
int yPos = (int)(Math.random()*(FRAMEY-100)+ 50);
pd = new Player(150,150,50);


t = new Timer((17), new Listener());
t.start();

addKeyListener(new KeyHandler());
setFocusable(true);
}



//PAINT
public void paintComponent(Graphics g)
{
g.drawImage(myImage, 0, 0, getWidth(), getHeight(), null);

}

//LISTENER
private class Listener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
myBuffer.setColor(BACKGROUND);
myBuffer.fillRect(0,0,FRAMEX,FRAMEY);

pd.move();
pd.draw(myBuffer);

myBuffer.setColor(Color.BLACK);
repaint();
}
}



//MOVE
private class KeyHandler extends KeyAdapter
{
//Ground
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_LEFT){

pd.setdx(-2);
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT){

pd.setdx(2);
}
if(e.getKeyCode() == KeyEvent.VK_UP){
pd.setY(pd.getY()-1);
pd.setdy(-5.5);
}



}
}
}

最佳答案

问题不是CardLayout,问题是KeyListener的使用

基本上发生的情况是,当您切换布局时,您的组件没有获得焦点,这意味着您的 KeyListener 无法响应按键输入。

最简单的解决方案是使用 Key Bindings相反,因为它们允许您定义将引发关键事件的焦点级别。

关于java - CardLayout 输入问题 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21474152/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com