这次的思路很简单,把ImageIcon放到JLabel控件中去,然后在放到JPanel控件里,最后把这个JPanel放到JFrame就可以了。貌似很麻烦的样子,其实不然,因为这次要用到“布局控制”,要让控件按你的想法摆放,到后来你就会直到这样一个套一个的好处了,呵呵。 关于“布局控制”,容器不都有add方法么,布局后你只管add内容,其他的就交给”布局控制“去管就可以了,SWING提供了蛮多的现成的东东给你弄,甚至你用那些东东可以摆放出任意你能想象出来的“造型”。这里只是做简单介绍,能用上就行,慢慢从例子里面体会时最好的,具体的可以参考JDK文档或者具体的SWING的书籍。首先看最简单最普通的一个布局:FlowLayout。它会让组件(控件,随便叫)直接"流"到表单上,从左到右,从上到下,一行满了再换一行。下面我们来举一个FlowLayout的例子。你会发现,用了FlowLayout之后,组件就会冻结在它的"固有"尺寸上。比如JButton就会根据字符串的长度来安排大小。 e.g. :
public FlowLayoutEG() ...{ this.setTitle("FlowLayout的简单演示"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(new FlowLayout()); this.setSize(200, 200); // 添加几个控件进去 for(int i =1; i <=20; i++) ...{ this.add(new JButton("JButton"+ i)); } }
好了,这样一下子就添了20个按钮上去,改变下窗口大小应该能看出FlowLayout是怎样排布的。
再讲下另一个Layout:BorderLayout。这个一般用作大框架上,它分为上(North),下(South),左(West),右(East),中(Center),或者叫做东南西北中也可以,add控件的时候你要自己指明放那里,不然默认就是放到Center去。比如菜单栏可以放North,状态栏放South,中间放编辑区域,左边放工具栏等,其实看看大多WINDOWS软件就知道大概什么个摆放样子了。也举个例子吧: e.g. : 好了,就这么简单,看到效果了吧,嘿嘿,就这么简单。 关于其他还有很多,比如CardLayout,GridLayout(这个用了多,其实就是网格式的排布,最后的一个程序中会用到,自己来看看大概式怎么用的吧,蛮简单的,不所也应该能看懂),地图显示就是要用到GridLayout,还有超级复杂的GridBagLayout,还有BoxLayout等等,有兴趣的可以自己去找这方面的资料看,JDK里面就蛮多的了。
import javax.swing.*; import java.awt.*; class BorderLayoutEG extends JFrame ...{ // 构造函数 public BorderLayoutEG() ...{ // 设置程序标题 this.setTitle("BorderLayout的简单演示"); // 按X时关闭JVM虚拟机(个人理解不同) this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置布局为BorderLayout this.setLayout(new BorderLayout()); this.setSize(200, 200); // 添加几个控件进去 this.add(BorderLayout.NORTH, new JButton("JButton in North")); this.add(BorderLayout.SOUTH, new JLabel("JLabel in South")); this.add(BorderLayout.CENTER, new JTextArea(40, 50)); this.add(BorderLayout.WEST, new JButton("JButton in West")); this.add(BorderLayout.EAST, new JButton("JButton in East")); // .... add more } // main publicstaticvoid main(String[] args)...{ // 创建一个实例,调用显示方法 (new BorderLayoutEG()).setVisible(true); } }