我有这个功能:
/***
* 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
上实现的接口。有什么方法可以从接口类中获取JComponent
的实例吗?
我称之为
changePanel(new LoginPanel());
从逻辑上讲,我应该能够获得LoginPanel
的实例,对吧?我想知道它是否使用某种类型的类型声明?
答案 0 :(得分: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
,那么你必须弄明白该做什么。
答案 1 :(得分:0)
如果您的方法具有参数类型作为名为CBPanel
的接口的引用,则此方法可以接受实现此接口的任何类的对象。因此,如果JComponent
实施CBPanel
,那么您的方法changePanel
将接受它。