当前位置: 代码迷 >> Java相关 >> [求助]问一个关于THIS用法的问题
  详细解决方案

[求助]问一个关于THIS用法的问题

热度:220   发布时间:2006-05-22 08:00:00.0
[求助]问一个关于THIS用法的问题
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BorderLayoutDemo extends JFrame
{
JPanel contentPane;
BorderLayout borderLayout1=new BorderLayout();
JButton northBtn=new JButton();
JButton centerBtn=new JButton();
JButton westBtn=new JButton();
JButton eastBtn=new JButton();
JButton southBtn=new JButton();
public BorderLayoutDemo()
{
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String args[])//throws Exception
{
//设置窗口的显示风格
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e)
{
e.printStackTrace();
}
BorderLayoutDemo frame=new BorderLayoutDemo();
//Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();//获得屏幕的分辨率--宽和高。
Dimension frameSize=frame.getSize();//获得frame的宽和高
//也可以用下面的方法获得屏幕的分辨率--宽和高。
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screenSize=kit.getScreenSize();

frame.setLocation((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2);
frame.setVisible(true);
}
private void jbInit()throws Exception
{
contentPane=(JPanel)this.getContentPane();//这里这个是什么意思~?为什么不能用我下面的那句话代替?
//contentPane=new JPanel();
contentPane.setLayout(borderLayout1);
//这里的这个THIS和下面的那个THis到底指的是什么 ?为什么不能用contentPane代替
this.setSize(new Dimension(400,300));
this.setTitle("BorderLayout布局示例");
northBtn.setText("北");
centerBtn.setText("中");
westBtn.setText("西");
eastBtn.setText("东");
southBtn.setText("南");
contentPane.add(northBtn,BorderLayout.NORTH);
contentPane.add(centerBtn,BorderLayout.CENTER);
contentPane.add(westBtn,BorderLayout.WEST);
contentPane.add(eastBtn,BorderLayout.EAST);
contentPane.add(southBtn,BorderLayout.SOUTH);
//设定最下化的图片
Toolkit kit=Toolkit.getDefaultToolkit();//Tookit是抽象类不能被事例化,它有一个静态方法static Toolkit getDefaultToolkit(),返回一个Toolkit的对象实例
Image image=kit.getImage("G:\\JAVA\\Book\\bookmark.gif");
this.setIconImage(image);
}
protected void processWindowEvent(WindowEvent e)
{
if(e.getID()==WindowEvent.WINDOW_CLOSING)
{
System.exit(0);
}
}
}
上面的代码中我有几个地方搞不懂我在代码中注释了 请大家帮帮忙!
搜索更多相关的解决方案: THIS  用法  

----------------解决方案--------------------------------------------------------
getContentPane()是获得窗体 JFrame上添加组件必须用这个语句
this就是当前对象的引用 也就是BordLayoutDemo的对象
----------------解决方案--------------------------------------------------------

还是有点似懂非懂的感觉``


----------------解决方案--------------------------------------------------------
?
----------------解决方案--------------------------------------------------------
BorderLayoutDemo frame1=new BorderLayoutDemo();
BorderLayoutDemo frame2=new BorderLayoutDemo();
...
这样的代码可以写一大堆吧?
但是
contentPane=(JPanel)this.getContentPane();//这里这个是什么意思~?为什么不能用我下面的那句话代替?
这句话,不可能写成 frame1.getContentPane(); frame2.getContentPane(); ...
这样的东西谁要这么写,会挨雷劈的,呵呵,所以 用this 代替了frame1...这些东西,
所以斑竹说 this就是当前对象的引用 在你的代码里也就是指BordLayoutDemo的对象

getContentPane()可以查一下JFrame的api
public Container getContentPane()
这样一看,就知道它返回的是一个Container类型的,所以(JPanel)this.getContentPane这么写,强制把Container类型 转换成了一个 JPanel类型的

[此贴子已经被作者于2006-5-23 23:54:42编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案