我使用javax.swing和java.awt比较新,所以如果我笨拙地表达我的问题,请耐心等待。
假设我有一个自定义类CustomClass,它扩展并创建一个JPanel p 。在课程中,我将JButton b 添加到 p 。稍后在另一个程序文件中,我创建了一个名为 cp 的CustomClass实例,并希望能够使用“actionPerformed”方法从 b 中捕获一个单击事件。我的问题是如何从实例 cp “到达”(如书面路径)JButton b ? (假设所有相关的类文件已经关联)
答案 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 loop
和getComponentAt(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()