我正在用Java编写GUI。一种方法初始化并显示一个表单:
public class launchQMBPMN extends CytoscapeAction {
private JComboBox termDB;
public launchQMBPMN(QMBPMN SaddleSum) {
super("SaddleSum");
setPreferredMenu("Plugins");
}
public class buttonListener implements ActionListener{
public void actionPerformed(ActionEvent e){
JFrame hello = new JFrame();
JLabel test = new JLabel(termDB.getSelectedItem());
test.add(hello);
hello.show();
}
}
public void actionPerformed(ActionEvent e) {
CytoscapeDesktop desktop = Cytoscape.getDesktop();
InteractionTools tools = new InteractionTools();
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.LINE_START;
c.weightx = 0.5;
buttonListener buttonPressed = new buttonListener();
// TERM DATABASE AND WEIGHTS
JPanel qmbpTermsPanel = new JPanel(new GridBagLayout());
termDB = new JComboBox(tools.discoverTermDatabases());
c.gridx = 1;
c.gridy = 0;
qmbpTermsPanel.add(termDB, c);
...
我想在buttonListner类中访问'termDB'。我该怎么做?
答案 0 :(得分:2)
只需使用其名称访问它,该名称应该在外部类中工作。
另请参阅:http://download.oracle.com/javase/tutorial/java/javaOO/innerclasses.html
答案 1 :(得分:1)
在此处发布时访问它。一些评论:
show
JFrame
方法(实际上属于java.awt.Window
)已被弃用,请改用setVisible(true);
。
我不确定test.add(hello);
是否真的需要。是吗?它将框架添加到标签。
termDB.getSelectedItem()
返回Object
,JLabel
构造函数需要字符串:termDB.getSelectedItem().toString()
?
答案 2 :(得分:0)
您可以创建ButtonListener的子类,并在创建它时将termDB传递给它,或以其他方式设置它。
或者你可以定义一个需要按钮监听器并使termDB最终的匿名内部类,它将在你的ButtonListener实现中可用。或者你可以像在我提出的第一个选项中那样将termDB引用传递给匿名内部类。