为什么dialog.setLocationRelativeTo(this)有效,但是对象obj; dialog.setLocationRelativeTo(obj)不起作用?

时间:2014-06-07 19:19:53

标签: java swing oop

请通过并帮助我理解原因:

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之后它会抛出类转换异常。

1 个答案:

答案 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);

因为objObject的实例,而不是{{1}}。