笔者今日才自学到Swing编程,终于摆脱了控制台有点小激动,今天编了一个模拟QQ的聊天窗口的小程序贴在这里供大家批评指正。
说明:
1.这只是实现了这个界面,其中按钮(除了滚动条)都没有深层的作用;
2.理解时,一定要把JSplitPane看作是一个可以被分割的容器,而不能把它看作是一个分隔符;
下面是效果图:
/**
* 演示QQ聊天窗口的布局管理
* 重点思想:一定要把JSplitPane看作是一个可以被分隔的容器,而不是一个分隔符组件
*/
package com.swing;
import java.awt.*;
import javax.swing.*;
public class QQChatWin extends JFrame {
//Definition
JSplitPane jsplit1, jsplit2;
JTextArea jta1;
JLabel jlb;
JList jlist;
JScrollPane jsp1,jsp2;
JPanel jp1,jp3;
JComboBox jcb;
JTextField jtf;
JButton jb;
public static void main(String[] args) {
QQChatWin qc = new QQChatWin();
}
public QQChatWin()
{
//Creation
jta1 = new JTextArea();
jlb = new JLabel(new ImageIcon("images/beauty.jpg"));
//初始化右侧JList内容-->好友列表
String []friends = {"Hanson","Mark","Leo","Joshua","Blade","Howland","Baker","Simon"};
jlist = new JList(friends);
jlist.setVisibleRowCount(4);
//设置滚动条
jsp1 = new JScrollPane(jta1);
jsp2 = new JScrollPane(jlist);
String []chatter = {"本拉登","小布什","奥巴马"};
jcb = new JComboBox(chatter);
jtf = new JTextField(12);
jb = new JButton("发送");
jp1 = new JPanel();
//jp2 = new JPanel();
jp3 = new JPanel();
//先创建分割窗口,明确分割方式,但先不设置组件
jsplit1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
jsplit2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
//设置分割窗口可选显示/隐藏
jsplit1.setOneTouchExpandable(true);
jsplit2.setOneTouchExpandable(true);
//Layout
this.setLayout(new BorderLayout());
//左下窗口布局
jp3.add(jcb);
jp3.add(jtf);
jp3.add(jb);
//左侧窗口布局,因JPanel默认是流式布局,所以要指定一下布局方式
jp1.setLayout(new BorderLayout());
jp1.add(jsp1,BorderLayout.CENTER);
jp1.add(jp3,BorderLayout.SOUTH);
//右侧窗口上
//jp2.add(jlb,BorderLayout.NORTH);
//jp2.add(jsp2,BorderLayout.SOUTH);
//这部分一定要写在组件都初始化完成之后
jsplit1.setLeftComponent(jp1);
jsplit2.setTopComponent(jlb);
jsplit2.setBottomComponent(jsp2);
jsplit1.setRightComponent(jsplit2);
//因为主容器就是一个jsplit1,而jsplit2只是jsplit1的右半部分,故只需要将jsplit1加入到JFrame即可
this.add(jsplit1);
//set configuration
this.setTitle("QQ聊天");
this.setSize(500,350);
this.setLocation(200,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
//设置标题栏的小图标,小企鹅
this.setIconImage((new ImageIcon("images/qq.GIF")).getImage());
//Display
this.setVisible(true);
//这句话应该写在setVisible后面才生效,笔者在网上查的资料,也实验了一下
jsplit1.setDividerLocation(0.7);
}
}