|
查看: 1550|回复: 12
|
一些java的疑问
[复制链接]
|
|
|
本帖最后由 1max1 于 12-2-2010 09:50 PM 编辑
为何两个都一样是800X600却得到不同的广度?
1:
import javax.swing.*;
import java.awt.*;
public class Test extends JFrame
{ public JPanel GUI()
{ JPanel p=new JPanel();
p.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
return p;
}
public Test()
{ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(800,600));
setContentPane(GUI());
pack();
setVisible(true);
}
public static void main(String[] args)
{ new Test();
}
}
2:
import javax.swing.*;
import java.awt.*;
public class Test extends JFrame
{ public JPanel GUI()
{ JPanel p=new JPanel();
p.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
p.setPreferredSize(new Dimension(800,600));
return p;
}
public Test()
{ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(GUI());
pack();
setVisible(true);
}
public static void main(String[] args)
{ new Test();
}
}
PS:正确的800X600是第一个。
请问setContentPane()和add()有何不同?
特别感谢:jasonmun |
|
|
|
|
|
|
|
|
|
|
发表于 30-1-2010 07:15 PM
|
显示全部楼层
本帖最后由 jasonmun 于 30-1-2010 07:17 PM 编辑
一个class里面拥有static method, 那表示说这个 method 是这个class 所拥有..
在未 create object 之前, static method 已经存在..
无论你用这个class create 多少个 objects, 这些 objects 会共同share 这个 method..
(class level 的 method, 而不是 object level 所拥有的 method)
而 static method 里只可以store static 的属性, 不可以store object 的属性.. |
|
|
|
|
|
|
|
|
|
|
发表于 30-1-2010 07:32 PM
|
显示全部楼层
http://860830wlx.blog.51cto.com/327727/79316
关于setContentPane()和getContentPane()的应用
我们可以在 JFrame 对象中添加 AWT 或者 Swing 组件。但是,虽然它有 add 方法,却不能直接用于添加组件,否则会抛出异常——不信就试试。造成这个现象的原因只有一个解释:JFrame 不是一个容器,它只是一个框架。那么,应该怎么添加组件呢?
JFrame 有一个 Content Pane,窗口能显示的所有组件都是添加在这个 Content Pane 中。JFrame 提供了两个方法:getContentPane 和 setContentPane 就是用于获取和设置其 Content Pane 的。
对JFrame添加组件有两种方式:
1)用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)
2)建立一个Jpanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:
JpanelcontentPane=newJpanel();
……//把其它组件添加到Jpanel中;
frame.setContentPane(contentPane);
//把contentPane对象设置成为frame的内容面板
我们可以在 JFrame 对象中添加 AWT 或者 Swing 组件。但是,虽然它有 add 方法,却不能直接用于添加组件,否则会抛出异常——不信就试试。造成这个现象的原因只有一个解释:JFrame 不是一个容器,它只是一个框架。那么,应该怎么添加组件呢?
JFrame 有一个 Content Pane,窗口能显示的所有组件都是添加在这个 Content Pane 中。JFrame 提供了两个方法:getContentPane 和 setContentPane 就是用于获取和设置其 Content Pane 的。
对JFrame添加组件有两种方式:
1)用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)
2)建立一个Jpanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:
JpanelcontentPane=newJpanel();
……//把其它组件添加到Jpanel中;
frame.setContentPane(contentPane);
//把contentPane对象设置成为frame的内容面板 |
|
|
|
|
|
|
|
|
|
|
发表于 30-1-2010 07:35 PM
|
显示全部楼层
很基础的问题, 如果你有打算成为programmer,
首先, 你要学会应用 google.. |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 30-1-2010 08:53 PM
|
显示全部楼层
本帖最后由 1max1 于 30-1-2010 08:58 PM 编辑
回复 4# jasonmun
谢谢给于解释。
其实我有上网找过,但英文能力有限,所以不怎么了解。
而 static method 里只可以store static 的属性, 不可以store object 的属性..
看了只有把object变成static了。。。 |
|
|
|
|
|
|
|
|
|
|
发表于 30-1-2010 09:38 PM
|
显示全部楼层
英文看不懂, 可以看中文的..
中文的资料也不会少于英文的..
而我呢, 英文也不觉得会比别人强, 但我中英文的资料我也看..
从中, 英文水准也不知不觉在提升..
所以, 要有成长, 就不要给自己藉口.. 否则, 你的水平不会提高.. |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 30-1-2010 10:34 PM
|
显示全部楼层
public static void main(String[] args)
{ aMethod();
otherMethod();
anotherMethod();
}
由于这void main是static,一些method也必须改成static。请问有其他良策? |
|
|
|
|
|
|
|
|
|
|
发表于 30-1-2010 11:35 PM
|
显示全部楼层
由于这void main是static,一些method也必须改成static。请问有其他良策?
1max1 发表于 30-1-2010 10:34 PM 
谁说的? |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 1-2-2010 09:58 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 4-2-2010 03:39 PM
|
显示全部楼层
回复 9# 1max1
java.awt.GridLayout.GridLayout(int rows, int cols)
Creates a grid layout with the specified number of rows and columns. All components in the layout are given equal size.
你可以改用BorderLayout,add()的時候要指定放在哪裡。
BorderLayout.EAST
BorderLayout.WEST
BorderLayout.CENTER
BorderLayout.SOUTH
BorderLayout.NORTH
一共五個方位 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 9-2-2010 07:13 PM
|
显示全部楼层
回复 10# MaokeJackson
找了之后才知道可用spring layout 完成。
至于border layout就不怎么变通。
谢谢你的回复。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 12-2-2010 09:26 PM
|
显示全部楼层
本帖最后由 1max1 于 12-2-2010 09:49 PM 编辑
为何两个都一样是800X600却得到不同的广度?
1:
import javax.swing.*;
import java.awt.*;
public class Test extends JFrame
{ public JPanel GUI()
{ JPanel p=new JPanel();
p.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
return p;
}
public Test()
{ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(800,600));
setContentPane(GUI());
pack();
setVisible(true);
}
public static void main(String[] args)
{ new Test();
}
}
2:
import javax.swing.*;
import java.awt.*;
public class Test extends JFrame
{ public JPanel GUI()
{ JPanel p=new JPanel();
p.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.red));
p.setPreferredSize(new Dimension(800,600));
return p;
}
public Test()
{ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(GUI());
pack();
setVisible(true);
}
public static void main(String[] args)
{ new Test();
}
}
PS:正确的800X600是第一个。 |
|
|
|
|
|
|
|
|
|
|
发表于 13-2-2010 09:16 PM
|
显示全部楼层
|
第一個設的是JFrame的size,第二個設的是JPanel的size。 |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|