我最近使用System.out.println()創建並完成了使用IDE處理IDE的程序的第一階段;什麼不是。現在,我想給這個程序一個GUI,我遇到了一個問題。這是我的MCV例子(或者至少我認爲是,如果不是,請告訴我)。如何在使用JTextField時等待用戶輸入
import java.net.*;
import java.net.UnknownHostException;
import java.net.NoRouteToHostException;
import java.io.*;
import net.sf.json.*;
import org.apache.commons.lang.exception.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.BoxLayout;
import javax.swing.JOptionPane;
import java.awt.Component;
import java.awt.Container;
import java.util.Scanner;
public class WOT_PlayerComp_V2
{
public static JFrame f;
public static JLabel resultLabel;
public static JPanel p;
public static JTextField t;
public static String comparisonResults = "";
public static String holder = "";
public static String playerName = "";
public boolean gameIsStillRunning = true;
public static void testGUI()
{
f = new JFrame();
addComponentsToPane(f.getContentPane());
f.setSize(300, 400);
f.setLocation(200, 200);
// f.setResizable(false);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
public static void addComponentsToPane(Container c)
{
c.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS));
p = new JPanel();
t = new JTextField(15);
//t.setDocument(new JTextField_wLimit(50));
//You can ignore this line, it is what I used to limit the input of my textfield
resultLabel = new JLabel();
//html makes the br have purpose, p makes it wrap
resultLabel.setHorizontalAlignment(SwingConstants.CENTER);
resultLabel.setVerticalAlignment(SwingConstants.TOP);
resultLabel.setSize(50, 50);
c.add(t);
c.add(resultLabel);
}
public WOT_PlayerComp_V2()
{
testGUI();
//... Lots of irrelevant code
resultLabel.setText("Enter your username.");
while(gameIsStillRunning)
{
//irrelevant code
playerName = t.getText();//scans user input
t.setText("");
//more irrelevant code
}
//if(playerName == null || playerName.equals(""))
//^^ it shouldn't go into here, I want my while loop to wait
//for user input like it did when i was using a Scanner object
//
}
public static void main(String[] args)
{
WOT_PlayerComp_V2 w = new WOT_PlayerComp_V2();
}
}
基本上,在我使用JTextField對象之前,我使用了一個Scanner對象。 Scanner對象實際上會停止我的while循環並運行該方法,然後繼續。我想知道這是否可能與JTextField。我希望能夠在中間停止for循環並等待用戶輸入。它似乎沒有像我上面的MCV示例那麼大的問題,但我使用的代碼很大程度上依賴於輸入,並會響應用戶輸入null或空字符串。因此,它將完成它所要做的事情,響應正確的用戶輸入,並且這隻會持續一次迭代,然後它將繼續從JTextField獲取輸入,因爲它處於while循環中。這是我的問題。
如果一切都失敗了,我可以用一個JButton採取輸入,但即使這樣,我仍然不知道如何停止while循環 – DreadHeadedDeveloper 2014-10-05 02:17:04