Also, ich erstelle ein RPG-Spiel für meine AP Informatik-Klasse. Eine der Ebenen, die ich dafür mache, ist eine Ebene, auf der der Spieler in einer Endlosschleife feststeckt, und er wird kontinuierlich zurück in die Mitte des Bildschirms bewegt. Um dies zu lösen, drückt der Spieler Enter, um ein Textfeld zu öffnen, um entweder "break" einzugeben. oder "zähle ++". Wenn ich jedoch die Eingabetaste drücke, wird die Größe des Fensters komplett geändert und die Dinge, die auf dem Jpanel gezeichnet sind, sind verschwunden.Wie fügen Sie ein Textfeld zu einem Jpanel hinzu, das auf einen Jframe gezeichnet wird?
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class InfiniteLoop extends JPanel implements KeyListener{
public Sprite character;
Set<Character> keys = new HashSet<Character>();
ArrayList<Image> sprite = new ArrayList<Image>();
static JFrame frame;
int frames;
public InfiniteLoop(){
super();
frames = 0;
addKeyListener(this);
try {
sprite.add(ImageIO.read(new File("src/Sprite/back.png")));
sprite.add(ImageIO.read(new File("src/Sprite/back walk 1.png")));
sprite.add(ImageIO.read(new File("src/Sprite/back walk 2.png")));
sprite.add(ImageIO.read(new File("src/Sprite/left idle.png")));
sprite.add(ImageIO.read(new File("src/Sprite/left walk.png")));
sprite.add(ImageIO.read(new File("src/Sprite/left walk 2.png")));
sprite.add(ImageIO.read(new File("src/Sprite/Idle.png")));
sprite.add(ImageIO.read(new File("src/Sprite/front walk 1.png")));
sprite.add(ImageIO.read(new File("src/Sprite/front walk 2.png")));
sprite.add(ImageIO.read(new File("src/Sprite/right idle.png")));
sprite.add(ImageIO.read(new File("src/Sprite/right walk.png")));
sprite.add(ImageIO.read(new File("src/Sprite/right walk 2.png")));
character = new Sprite(400,250, 0.25, sprite);
} catch (IOException e) {
e.printStackTrace();
}
}
public Dimension getPreferredSize() {
return new Dimension(800, 500);
}
public static void main(String[] args){
InfiniteLoop panel = new InfiniteLoop();
frame = new JFrame("APCS the game");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.addKeyListener(panel);
frame.setSize(800, 500);
frame.pack();
frame.setBackground(Color.white);
frame.setVisible(true);
}
public void paintComponent(Graphics g) {
frames ++;
if(frames > 500){
character.move(400, 250);
frames = 0;
}
int width = getWidth();
int height = getHeight();
g.clearRect(0, 0, width, height);
g.setColor(Color.black);
g.setFont(new Font("Comic Sans", Font.PLAIN, 32));
g.drawString("while(count == 1){", 150, 100);
g.drawString("}", 600, 400);
character.draw(g);
character.move(keys, width, height);
repaint();
}
public synchronized void keyPressed(KeyEvent event) {
//Adds pressed key to set
keys.add(event.getKeyChar());
if(event.getKeyCode() == event.VK_ENTER){
frame.getContentPane().add(new JTextField("Stop this infinite loop"));
frame.pack();
}
}
public synchronized void keyReleased(KeyEvent event){
//Method to remove key from Set if released
System.out.println(event.getKeyChar());
if(keys.contains(event.getKeyChar()))
keys.remove(event.getKeyChar());
}
//Empty Implemented method that has to be here for use of listener
public void keyTyped(KeyEvent event) {
}
}
Kann mir bitte jemand sagen, wie man richtig das Textfeld auf der JPanel hinzufügen, weil ich nur Leute, die es auf dem JFrame direkt hinzugefügt finden konnten?
* Hinweis: Sprite-Klasse ist eine einfache Klasse, die ich gemacht habe, um Zeichenbewegung, Gehen und Richtungswechsel durch eine ArrayList zu handhaben.
Warum nicht Pop es in einem JOptionPane oder einem modalen JDialog? –
Ich habe nie schwer von denen. Sind das separate Popout-Fenster? – OSXpro