Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing中的委托(相当于Python特性)_Java_Swing_Traits_Traitsui - Fatal编程技术网

Java Swing中的委托(相当于Python特性)

Java Swing中的委托(相当于Python特性),java,swing,traits,traitsui,Java,Swing,Traits,Traitsui,我是一名长期的Python开发人员,依靠Enthound的/TraitsUI库进行快速GUI开发。我试图了解Swing是否具有类似的特性实现,从而允许轻松的授权 假设我有一个引用另一个类的JFrame,Foo,还有一个文本字段,fooText。当用户更改fooText时,会触发一个事件,并将更改向下传播到Foo public class View extends javax.swing.JFrame { private Foo foo; private javax.swing

我是一名长期的Python开发人员,依靠Enthound的/TraitsUI库进行快速GUI开发。我试图了解Swing是否具有类似的特性实现,从而允许轻松的授权

假设我有一个引用另一个类的JFrame,
Foo
,还有一个文本字段,
fooText
。当用户更改
fooText
时,会触发一个事件,并将更改向下传播到
Foo

public class View extends javax.swing.JFrame {

    private Foo foo; 
    private javax.swing.JTextField fooText;

    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt){
    foo.fooText = this.fooText.getText();                                        

    ...
}
其中
Foo
类也共享
fooText
值:

public class Foo{
    public String fooText;
}
是否可以在类
Foo
View
之间同步
fooText
的值?在上面的示例中,我必须通过事件侦听器手动传入新值。在Python特性库中,我可以简单地告诉Foo使用委托。比如:

class Foo(HasTraits):
      view = Instance(View);
      String fooText = DelegatesTo(view)
通过这种方式,我没有传递共享变量,而是将对
视图
对象的引用传递给程序中的其他对象,然后对
视图.fooText
的任何更改都会立即传播到委派类。当用户界面字段需要跨多个类共享时,这将非常有帮助

java/swing中有类似的功能吗


谢谢

在视图中,您将fooText声明为JTextField;在Foo中,将fooText声明为字符串。你不能让他们平等。但是在actionListener中,您可以设置
foo.fooText=this.fooText.getText()(最好对这些字段使用不同的名称,也最好在nFoo中将文本变量设为私有,并使用Setter设置其值。感谢您的提示,我完全忽略了类型差异。最后,我仍然不明白它们是否可以按照TraitsUI中描述的方式进行同步。我将更新我的问题来反映
getText()
不,swing不是像traits那样构建的。您需要做更多的工作来公开底层变量。在视图中,您将fooText声明为JTextField;在Foo中,您将fooText声明为字符串。您不能将它们设置为相等。但是在actionListener中,您可以设置
Foo.fooText=this.fooText.getText();
(最好对这些字段使用不同的名称,也最好在nFoo中将文本变量设为私有,并使用Setter设置其值。感谢您的提示,我完全忽略了类型差异。最后,我仍然不明白它们是否可以按照TraitsUI中描述的方式进行同步。我将更新我的问题来反映
getText()
不,swing不像traits那样构建。您需要做更多的工作来公开底层变量。