Java Swing中的委托(相当于Python特性)
我是一名长期的Python开发人员,依靠Enthound的/TraitsUI库进行快速GUI开发。我试图了解Swing是否具有类似的特性实现,从而允许轻松的授权 假设我有一个引用另一个类的JFrame,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
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那样构建。您需要做更多的工作来公开底层变量。