-2

我有这个功能:

/***
 * Changes the windows panel and allows a state change
 * you can also change the minimum window size
 * */
public void changePanel(CBPanel panel){
    mainFrame.setContentPane();
    mainFrame.setMinimumSize(panel.getMinSize());
    mainFrame.setResizable(panel.canResize());
}

CBPanel作为唯一的参数,并且CBPanel是通常将在JCOmponent. 有什么方法可以获取JComponentfrom 接口类的实例吗?

我这样称呼它

changePanel(new LoginPanel());

所以从逻辑上讲,我应该能够获得 的实例,对LoginPanel吧?我想知道它是否使用某种类型转换的类型声明?

4

2 回答 2

1

假设你有

public class LoginPanel extends JComponent implements CBPanel {
    // ....
}

你可以做

public void changePanel(CBPanel panel){
    JComponent jComponent = null;
    if(panel instanceof JComponent) {
        jComponent = (JComponent) panel;
    }
    // if you want LoginPanel then you can cast it to it if it is a subtype of it
    LoginPanel loginPanel = null;
    if(panel instanceof LoginPanel ) {
        loginPanel = (LoginPanel) panel;
    }
    mainFrame.setContentPane();
    mainFrame.setMinimumSize(panel.getMinSize());
    mainFrame.setResizable(panel.canResize());
}

但是你必须弄清楚如果CBPanel你通过的不是太阳类型,你JComponent该怎么办LoginPanel

于 2013-09-14T17:18:31.833 回答
0

如果你的方法有一个参数类型作为被调用接口的引用,CBPanel那么这个方法可以接受任何实现这个接口的类的对象。因此,如果JComponent实现了CBPanel,那么您的方法changePanel将接受它。

于 2013-09-14T16:55:36.247 回答