Java SWT 创建侦听器以更改标签文本和 return 数据
Java SWT create listener to change text of a label and return data
我的问题如下。我想这是一个相当简单的问题。然而,在 google 上花了几个小时寻找解决方案后,我仍然没有答案。
我有一个函数 createGui
,我给它一个字符串变量 text
。此函数创建一个 GUI,用户可以在其中单击按钮。每当他点击按钮时,我想修改变量text
。我还想将标签 label
设置为 text
的值。最后,我要return这样修改变量text
.
你能告诉我,如何实现我的目标吗?
public String createGui(String text)
{
Display display = new Display();
Shell shell = new Shell( display );
shell.setLayout( new GridLayout( 1, false ) );
Label label = new Label( shell, SWT.NONE );
label.setText( "abc" );
Button b = new Button( shell, SWT.CHECK );
b.setText( "check" );
b.addSelectionListener( new SelectionAdapter()
{
@Override
public void widgetSelected( SelectionEvent e )
{
// modify text
// change label to text
}
} );
shell.pack();
shell.open();
while( !shell.isDisposed() )
{
if( !display.readAndDispatch() )
{
display.sleep();
}
}
display.dispose();
return text;
}
您不能 return 从匿名内部 class 到包含方法的调用者的值。
然而,您可以传入回调并在完成后调用此回调的方法:
public void createGui(String text, Callback callback)
{
[...]
b.addListener(SWT.Selection, (e) -> {
String modifiedText = // Manipulate the text
label.setText(modifiedText);
callback.onChange(modifiedText);
});
[...]
}
private static interface Callback
{
void onChange(String newValue);
}
public static void main(String[] args)
{
createGui("InitialText", (s) -> {
// Do something with the string here.
});
}
这是Java8。这是 Java 7 版本:
public void createGui(String text, final Callback callback)
{
[...]
b.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event event)
{
String modifiedText = // Manipulate the text
// label.setText(modifiedText);
callback.onChange(modifiedText);
}
});
[...]
}
private interface Callback
{
void onChange(String newValue);
}
public static void main(String[] args)
{
createGui("InitialText", new Callback()
{
@Override
void onChange(String newValue)
{
// Do something with the string here.
}
});
}
我的问题如下。我想这是一个相当简单的问题。然而,在 google 上花了几个小时寻找解决方案后,我仍然没有答案。
我有一个函数 createGui
,我给它一个字符串变量 text
。此函数创建一个 GUI,用户可以在其中单击按钮。每当他点击按钮时,我想修改变量text
。我还想将标签 label
设置为 text
的值。最后,我要return这样修改变量text
.
你能告诉我,如何实现我的目标吗?
public String createGui(String text)
{
Display display = new Display();
Shell shell = new Shell( display );
shell.setLayout( new GridLayout( 1, false ) );
Label label = new Label( shell, SWT.NONE );
label.setText( "abc" );
Button b = new Button( shell, SWT.CHECK );
b.setText( "check" );
b.addSelectionListener( new SelectionAdapter()
{
@Override
public void widgetSelected( SelectionEvent e )
{
// modify text
// change label to text
}
} );
shell.pack();
shell.open();
while( !shell.isDisposed() )
{
if( !display.readAndDispatch() )
{
display.sleep();
}
}
display.dispose();
return text;
}
您不能 return 从匿名内部 class 到包含方法的调用者的值。
然而,您可以传入回调并在完成后调用此回调的方法:
public void createGui(String text, Callback callback)
{
[...]
b.addListener(SWT.Selection, (e) -> {
String modifiedText = // Manipulate the text
label.setText(modifiedText);
callback.onChange(modifiedText);
});
[...]
}
private static interface Callback
{
void onChange(String newValue);
}
public static void main(String[] args)
{
createGui("InitialText", (s) -> {
// Do something with the string here.
});
}
这是Java8。这是 Java 7 版本:
public void createGui(String text, final Callback callback)
{
[...]
b.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event event)
{
String modifiedText = // Manipulate the text
// label.setText(modifiedText);
callback.onChange(modifiedText);
}
});
[...]
}
private interface Callback
{
void onChange(String newValue);
}
public static void main(String[] args)
{
createGui("InitialText", new Callback()
{
@Override
void onChange(String newValue)
{
// Do something with the string here.
}
});
}