2010-08-11 159 views
0

我有以下结构:Java;访问成员实例变量从另一个类

public class A { 
    private javax.swing.JLabel fullName; 

    public class B { 
      public B() { 
        fullName.setText("Martha Stewart"); 
      } 
    } 
    ... 
    ... 
    ... 
} 

我的目标是让B(目前分A类)是在一个单独的类。

问题是:当我分开这两个类时,我失去了JLabel的.setText()调用功能。我知道如果B在一个单独的类中,我将不得不在A类中编写一个公共setter方法。

然而,这是不合理的,因为我有大约100个按钮,并且每个按钮使用4-5个不同的函数按钮。为每个函数创建一个getter/setter方法是不合理的恕我直言。

我试图围绕一个更好的解决方案包裹我的头...可以帮助你们任何人,朋友吗?

+0

为什么要将其作为子类删除? – 2010-08-11 21:42:34

+1

你能解释一下你为什么要在一个单独的类中设置标签文本吗?你能不能创建一个带有JLabel和String的方法,并在该标签对象上调用setText?然后,A类可以传递它的JLabel对象,它将在A类之外被修改。(不知道我是否理解你的意图,因此不确定这是否符合答案。) – MikeTheReader 2010-08-11 21:44:32

+0

B类为特定“选项卡组”执行特定任务“在我的GUI中,还有更多喜欢它的东西。 例如: 我有一个5模块的模拟器。每个模块都是一个子类。每个子类在GUI中都有特定的功能。 – 2010-08-11 21:45:58

回答

2

不是 A的子类,这是一个嵌套(内)A.内类

但是,你不应该试图去其他类型的字段的访问 - 它打破封装。属性是一个更好的解决方案 - 或者,也可以调用fullName.setText()本身的setFullNameText方法。仅仅因为你有100个按钮(哎哟!)并不意味着是时候把封装扔出窗外了。这确实意味着您可能想要考虑将这100个字段分组为较小的类...

+0

感谢您的回应!有没有办法自动生成getter/setter,还是必须一个一个单独做? – 2010-08-11 21:52:16

+2

像Eclipse这样的IDE可以生成所有这些。 – KeatsPeeks 2010-08-11 21:53:12

2

不要让某个类修改另一个类的属性,这会破坏封装。如果你无法忍受getter和setter,我会建议一个配置对象(比如map),它可以被赋予构造函数和/或你的主GUI类的setter。

顺便说一句:

我有大约100按钮

我认为这是一个主要的问题。您应该在代表控件组的几个类中打破GUI。