请通过并帮助我理解原因:
public Class Frame extends JFrame{
public void JbInit(){
JDialog dia = new JDialog();
dia.setSize(200,200);
dia.setLocationRelativeTo(this);// this will work fine while we are passing the current object.
dia.setVisibile(true);
NewFrame obj = new NewFrame();
obj.newDialog(this);
}
}
Class NewFrame{
public void newDialog(object obj){
JDialog dia = new JDialog();
dia.setSize(200,200);
dia.setLocationRelativeTo(obj);
dis.setVisible(true);
}
}
这不起作用,设置Location方法会将component作为参数,所以在这里它会要求将它转换为Component,在转换为component之后它会抛出类转换异常。
答案 0 :(得分:2)
因为您调用的方法 - JComponent.setLocationRelativeTo(Component c)
采用Component
参数,而不是Object
参数。
如果你仔细想想,那就没有意义了:要setLocationRelativeTo
某些东西,你需要知道这个东西的位置是什么。 Component
的结构是为了适应这种情况,但任意对象都不是。
将:
Double d = new Double(4.48);
dia.setLocationRelativeTo(d);
或
Boolean b = new Boolean(false);
dia.setLocationRelativeTo(b);
有意义吗?
附录:听起来您需要阅读this
。
这以下是可以接受的:
public Class Frame extends JFrame{
...
dia.setLocationRelativeTo(this);
因为此上下文中的this
引用Frame
的实例,其扩展JFrame
,扩展JComponent
。以下是不可接受的:
public void newDialog(Object obj){
JDialog dia = new JDialog();
dia.setSize(200,200);
dia.setLocationRelativeTo(obj);
因为obj
是Object
的实例,而不是{{1}}。