我对使用 javax.swing 和 java.awt 比较陌生,所以如果我笨拙地表达我的问题,请耐心等待。
假设我有一个自定义类 CustomClass 扩展并创建了一个 JPanel p。在课堂上,我将 JButton b添加到p。稍后在另一个程序文件中,我创建了一个名为cp的 CustomClass 实例,并希望能够使用“actionPerformed”方法捕获来自b的单击事件。我的问题是我如何从实例cp “到达”(如书面路径) JButton b?(假设所有相关的类文件已经关联)
如果我理解正确,请使用 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 个不同的组件怎么办,有没有什么方法可以在不使用很多方法的情况下找到它们
只需调用实例,然后使用 a 进行迭代getComponentCount
,这将允许您访问所有组件:JPanel
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)
,该名称可以通过. 或者使用and将按钮与另一个按钮区分开来,我更喜欢后者。或者你甚至可以使用他们的文本,通过getName
JButton
getName()
setActionCommand(String name)
getActionCommand()
getText()