达成组件的澄清,Java Swing

时间:2013-01-11 11:32:32

标签: java swing jpanel

我使用javax.swing和java.awt比较新,所以如果我笨拙地表达我的问题,请耐心等待。

假设我有一个自定义类CustomClass,它扩展并创建一个JPanel p 。在课程中,我将JButton b 添加到 p 。稍后在另一个程序文件中,我创建了一个名为 cp 的CustomClass实例,并希望能够使用“actionPerformed”方法从 b 中捕获一个单击事件。我的问题是如何从实例 cp “到达”(如书面路径)JButton b ? (假设所有相关的类文件已经关联)

1 个答案:

答案 0 :(得分:4)

如果我理解正确,请使用getter和setter。我,您的customPanel将使用public getButton()方法返回JButton个实例:

class CustomPanel extends JPanel {
    JButton button=new JButton("Some button");

    public JButton getMyButton() {
        return button;
    }
}

class Test {
    CustomPanel cp=new CustomPanel();


    void someMethod() {
       JButton b= cp.getMyButton();
    }
}

更新

根据评论:

  

如果我的JPanel中有10个或20个不同的组件,那该怎么办?   有一些方法来达到他们而不必做很多方法

只需致电JPanel个实例上的getComponentCount,然后使用for loopgetComponentAt(int i)进行迭代,这样您就可以访问JPanel上的所有组件:

CustomPanel cp=...;//this class extends jpanel


for(int i=0;i<cp.getComponentCount();i++) {
    Component c=cp.getComponentAt(i);
     if( c instanceof JButton) {
         //do something
    }
 }

更新2

  

如果我有两个或多个应该属于同一类的对象,该怎么办?   但如果以其他方式对待,我怎么能区分它们   使用你提供给我的循环

查看setName(String name)的{​​{1}}和getName,这样您就可以为实例分配一个唯一的名称,该名称可以由JButton获取。或者,使用setActionCommand(String name)getActionCommand()来区分按钮,我更喜欢后者。 或者您甚至可以通过getName()

使用他们的文本