Java简单图形编程
今天这篇博客,讲的是部分 Java GUI 图形界面的用法,在开发一些需要服务端和客户端进行通信时,我们常常会写个界面,这时候做 java 后台的可能对图形界面比较陌生,所以在此我要简单聊一聊常见图形界面布局的方法。主要讲网格布局 和边界布局 。
Java GUI 两个比较常用的布局方法 网格布局 (GridLayout) 先上代码,代码中有详细注释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 package gridlayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JRadioButton; import javax.swing.JTextField; public class Demo1 extends JFrame { //定义个控件 private JPanel[] ps = new JPanel[5]; //定义并分配了空间,没分配空间就操作会报空指针异常 private JLabel l1, l2, l3, l4; private JTextField tf1; private JPasswordField pwf1; private JButton btn1, btn2; private JRadioButton rb1, rb2; private JCheckBox cb1, cb2; private ButtonGroup bg1, bg2; public Demo1() { //初始化各控件 for (int i = 0; i < ps.length; i++) { ps[i] = new JPanel(); } l1 = new JLabel("用户名:"); l2 = new JLabel("密码:"); l3 = new JLabel("性别:"); l4 = new JLabel("爱好:"); tf1 = new JTextField(15); pwf1 = new JPasswordField(15); btn1 = new JButton("登录"); btn2 = new JButton("取消"); rb1 = new JRadioButton("男"); rb2 = new JRadioButton("女"); bg1 = new ButtonGroup(); //使用单选按钮时,要使用ButtonGroup!复选按钮(框)不用! bg1.add(rb1); bg1.add(rb2); cb1 = new JCheckBox("唱歌"); cb2 = new JCheckBox("跳舞"); //设置布局,LayoutManager manager = new GridLayout(行rows,列cols); setLayout(new GridLayout(5, 1)); //控件添加到面板Jpanel ps[0].add(l1); ps[0].add(tf1); ps[1].add(l2); ps[1].add(pwf1); ps[2].add(l3); ps[2].add(rb1); //注意:不能添加bg1,它算是对象的容器 ps[2].add(rb2); ps[3].add(l4); ps[3].add(cb1); ps[3].add(cb2); ps[4].add(btn1); ps[4].add(btn2); for (int i = 0; i < ps.length; i++) { add(ps[i]);//或写成this.add(ps[i]));原因见下 } //用匿名内部类来监听事件源产生的事件 btn2.addActionListener(new ActionListener() { //实现ActionListener的actionPerformed方法 @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "即将关闭"); //弹出提示框 dispose(); //dispose方法是关闭窗体,并释放一部分资源 } }); //设置JFrame窗体的各属性,(注:因为这些都是父类JFrame的方法,没有歧义时,我就省略了this,不想写一些多余的) setTitle("GridLayout测试"); setSize(500, 400); setLocation(300, 100); setVisible(true); //设置窗体可见,不能忘了! //使用 System exit 方法退出应用程序。仅在应用程序中使用。如果不写,控制台会一直运行,不会退出 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { Demo1 demo1 = new Demo1(); } }
运行效果图:
上面主要的思想是,每行可以放一个 JPanel 面板容器,里面又可以添加控件或容器,然后做成你想要的几行几列的网格布局。
边界布局 (BorderLayout) 1、布局方位:
2、注意控件会自动调整: 1)北和南位置控件各占上、下一行,控件宽度将自动布满整行。 2)东、西和中间三个位置控件共占中间一行。 3)东南西北四个位置,不管哪里缺了控件,中间的控件都会自动占据那里。 具体效果大家可以自己去试试,下面看看我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 package borderlayout; import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class Demo2 extends JFrame { private JLabel l1; private JTextArea ta1; private JScrollPane sp1; private JComboBox<String> cb1; private JTextField tf1; private JButton btn1; private JPanel p1; public Demo2() { //初始化 l1 = new JLabel("聊天界面"); ta1 = new JTextArea(); //不写参数,会自动调节大小 sp1 = new JScrollPane(ta1); String[] strs = {"非匿名", "匿名"}; cb1 = new JComboBox<String>(strs); tf1 = new JTextField(15); btn1 = new JButton("发送"); p1 = new JPanel(); p1.add(cb1); p1.add(tf1); p1.add(btn1); add(l1, BorderLayout.NORTH); add(sp1, BorderLayout.CENTER); add(p1, BorderLayout.SOUTH); setTitle("BorderLayout测试"); setSize(500, 400); setLocation(300, 100); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { Demo2 demo2 = new Demo2(); } }
运行效果图:
上面就是中间的控件自动占据了东、西俩位置,因为就东、西俩位置没控件。
JOptionPane 消息提示框 因为我们在写界面时,可能会要弹出一些提示框,上面的第一个例子就用到了,在此我简单介绍一下三种消息常用的提示框方法(其实有四种,这三种比较常用和简单): 1、showConfirmDialog 询问确认问题,如是 / 否 / 取消。 2、showInputDialog 提示输入一些内容。 3、showMessageDialog 告诉用户发生了什么事。 简单的用法就是这样:JOptionPane.showMessageDialog(null,” 要显示的文字”),把 showMessageDialog 换成你想要的方法即可。如果想要详细学习 JOptionPane 的用法,可以参考官方文档 , 是英文的,英文不好的童鞋记得用下谷歌浏览器自带的翻译。好了图形界面的简单编程就讲到这,拜拜了!