我有一个JAVA纸牌游戏,每轮显示四张牌。
目前,每轮之间的停止正在等待控制台中的\ n输入。但是我想把它改成等待GUI上的键盘“输入”。
以下是我目前的代码。请让我知道如何更改它?
数百万的感谢!!!
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
public class Game {
public static void main(String args[]) throws IOException {
Deck deck = new Deck();
deck.shuffle();
int aGame = 4;
List<Card> cards = new ArrayList<Card> ();
for(int i = 0; i < 52; i++) {
cards.add(deck.deck.get(i));
if(aGame == 1) {
System.out.println(deck.deck.get(i).toString());
System.out.println("Start!!!");
JFrame f = new JFrame("Calculating 24!");
GridLayout grid = new GridLayout(2, 2);
f.setLayout(grid);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
for(Card c: cards){
f.add(new LoadImageApp(c));
}
f.pack();
f.setVisible(true);
cards.clear();
while (true) {
char c = (char) System.in.read();
if (c == '\n') {
f.setVisible(false);
break;
}
}
aGame = 4;
if(i == 51) {
deck.shuffle();
i = -1;
}
}
else if(aGame == 4) {
System.out.println("Calculate based on the following four cards!");
System.out.println(deck.deck.get(i).toString());
aGame --;
}
else {
System.out.println(deck.deck.get(i).toString());
aGame --;
}
}
}
}
答案 0 :(得分:3)
对于基于Swing的应用程序,应使用Key Bindings处理关键事件。但是,最终用户可能不会明白需要ENTER。更多以UI为中心的方法是为此目的使用对话框
JOptionPane.showMessageDialog(frame, "Press ENTER to continue");
使用基于控制台的读取方法(如InputStream#read
)是用户混淆的另一个原因。使用JTextComponent
等JTextField
来读取Swing应用程序中的用户输入。
答案 1 :(得分:3)
如果接受值的GUI元素是JTextField
,则可以添加ActionListener
,当用户点击 Enter
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
将其更改为:
f.setDefaultCloseOperaiton(JFrame.EXIT_ON_CLOSE);
或者更好..
f.setDefaultCloseOperaiton(JFrame.DISPOSE_ON_CLOSE);
第一个将具有与之相同的效果,但第二个也将检查在退出之前没有运行非守护程序线程。
不要尝试将GUI和命令行混合在一起。您编写应用程序的方式有很大不同。