我想在方法中传递JFrame作为参数, 有可能这样做吗?
这就是我想要的:
private void mouseClickedButtonsActions(JLabel l, Class c){
l.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseClicked(java.awt.event.MouseEvent evt) {
c ma = new c();
ma.setVisible(true);
setVisible(false);
}
});
}
答案 0 :(得分:0)
在这种情况下你不应该发送Class,如果你想了解更多关于发送类作为参数的信息,请查看Passing class as parameter。
现在,因为您想要将JFrame作为参数传递,您只需编写methodName(JFrame frame)
,否则如果您只想创建新的JFrame,则不需要传递它,只需在方法内创建一个新的: / p>
myMethod(){
JFrame frame = new JFrame();
// Do something with it
}
因为你可以看到没有必要在其他类中传递一个Class来创建该类的对象。
在这里,您可以看到如何将JFrame作为参数传递并创建新JFrame的示例:
public void jframe() {
JFrame frame = new JFrame("Frame 1");
JButton btn = new JButton("Click Me");
ActionListener al = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jframeAsParam(new JLabel("You added label to old JFrame"), frame);
//makeNewJFrame(new JLabel("You opened new JFrame"));
}
};
btn.addActionListener(al);
JPanel panel = new JPanel(new GridLayout(2, 1));
panel.add(btn);
frame.setContentPane(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 250);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public void jframeAsParam(JLabel lbl, JFrame frame) {
frame.getContentPane().add(lbl);
frame.setVisible(true);
}
public void makeNewJFrame(JLabel lbl) {
JFrame frame = new JFrame("Frame 2");
JPanel panel = new JPanel(new BorderLayout());
panel.add(lbl, BorderLayout.CENTER);
frame.setContentPane(panel);
frame.setSize(300, 250);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
取消注释makeNewJFrame(new JLabel("You opened new JFrame"));
以了解如何打开新的JFrame。