我有一个TextField
的图形用户界面,我的代码如下:
int port = 0;
try{
port = Integer.parseInt(frame.textfieldInput.getText());
}
catch(NumberFormatException npe)
{
System.out.println("Error! parse exception");
}
System.out.println("The Port is " + port); //is 0
我必须为端口分配值'0',否则代码不会编译,因为变量不会被初始化。
由于TextField
在程序开头为空,getText()
不会得到值,这就是端口保持为0的原因。
在代码继续之前有没有办法等待输入?
答案 0 :(得分:0)
找到解决方案,这就是我解决它的方法:
我在public String value = "";
public void createInput() {
buttonInput.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
value = textfieldInput.getText();
}
});
}
之外创建了一个全局变量:
public static void main(String[] args)
命名为'value'。
在我的while(frame.value.equalsIgnoreCase(""))
{
try
{
System.out.println("waiting...");
Thread.sleep(1000);
}
catch(InterruptedException ie)
{
System.out.println("interrupted");
}
}
中我声明了以下内容:
def increase[T: Numeric](x: T) = (y: T) => {
require( implicitly[Numeric[T]].gt(x , 0.asInstanceOf[T] ) )
if ( implicitly[Numeric[T]].gt(y , 0.asInstanceOf[T] ) )
implicitly[Numeric[T]].plus(x, y)
else
increase[T](x)(implicitly[Numeric[T]].abs(y))
}
val inc = increase[Int] _
println(inc(5)(-1))
我每次使用它时都必须清除变量'value',因此它将再次为空以备将来使用。
我不是解决问题的最佳方式,但它对我有用。
答案 1 :(得分:0)
下面的代码可能会让您了解更有效的方法来获得焦点丢失的价值。
JFrame frame = new JFrame();
frame.setSize(50, 50);
TextField field = new TextField();
field.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
// continue from here
System.out.println(field.getText());
}
@Override
public void focusGained(FocusEvent e) {
// TODO Auto-generated method stub
}
});
frame.getContentPane().add(field);
frame.setVisible(true);