Swing界面布局
Swing里面常用的布局有这么三种
1.BorderLayout
边界布局,JFrame默认布局,分为5个区域(东南西北中)
其中南北只能调节高度,东西只能调节宽度,中间大小根据东南西北确定
2.FlowLayout
流体布局,JPanel默认布局,组件位置会随着窗口大小改变而改变
3.GridLayout
网格布局,顾名思义,就是像网格那样分块
当我们创建一个窗口时,我们要清楚把不同的组件放到对应的区域上去
总之,要实现一个界面,首先创建一个容器,然后在容器里放不同的组件,如果要实现相应的功能,则给组件添加事件即可。
实例:
1.实现QQ登陆界面
注意:控制组件大小不能使用setSize()方法,应该使用setPerferredSize();
JFrame分为三层:
BootPane//最底层
LayerPane//中间层
ContentPane//最顶层
在实例中,一般情况下,我们把组件加入ContentPane中,所以我们要把背景图片加入到LayerPane中,然后设置面板透明,就可以实现在JFrame里面添加背景图片了.
package cn.czm0709; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.*; import javax.swing.*; /** * QQ登陆界面 * @author chenzhaomin * */ public class QQ extends JFrame { private JPanel panel_n; private JPanel panel_s; private JPanel panel_w; private JPanel panel_c; private JButton close; private JButton mini; private JButton login; private JLabel background; private JComboBox account; private JPasswordField password; private JLabel jl1; private JLabel jl2; private JLabel head; private JCheckBox remember; private JCheckBox auto; private Point p; public QQ() { /** * 框架设置 */ setSize(400, 300); setResizable(false);//禁止改变大小 setLocationRelativeTo(null); setUndecorated(true);// 无装饰 /** * 背景添加 */ background = new JLabel(new ImageIcon( "E:/TDDOWNLOAD/LanJie/src/cn/czm0709/5.jpg"));//创建一个带图片的标签 background.setBounds(0, 0, this.getWidth(), this.getHeight());//设置大小使其匹配框架 background.setBorder(BorderFactory.createRaisedBevelBorder());//设置边框 getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));//把标签加入LayerPane层中 JPanel imagePanel = (JPanel) this.getContentPane(); imagePanel.setOpaque(false);//设置ContentPane不透明 /** * 登陆按钮创建于添加 */ ImageIcon image3 = new ImageIcon( "E:/TDDOWNLOAD/LanJie/src/cn/czm0709/3.jpg"); login = new JButton(image3); login.setPreferredSize(new Dimension(image3.getIconWidth(), image3 .getIconHeight())); panel_s = new JPanel(); panel_s.setOpaque(false); panel_s.add(login); add(panel_s, BorderLayout.SOUTH); /** * 关闭按钮与最小化按钮添加 */ ImageIcon image1 = new ImageIcon( "E:/TDDOWNLOAD/LanJie/src/cn/czm0709/1.jpg"); close = new JButton(image1); close.setPreferredSize(new Dimension(image1.getIconWidth(), image1 .getIconHeight())); close.addActionListener(new ActionListener() { //添加监听器,当点击关闭按钮时退出 @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub System.exit(ABORT); } }); ImageIcon image4 = new ImageIcon( "E:/TDDOWNLOAD/LanJie/src/cn/czm0709/4.jpg"); mini = new JButton(image4); mini.setPreferredSize(new Dimension(image4.getIconWidth(), image4 .getIconHeight())); mini.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) {//添加监听器,当点击最小化按钮时最小化 // TODO Auto-generated method stub setExtendedState(1); } }); panel_n = new JPanel(); panel_n.setOpaque(false); panel_n.setLayout(new FlowLayout(FlowLayout.RIGHT, 2, 2));//重设流体布局 panel_n.add(mini); panel_n.add(close); panel_n.setPreferredSize(new Dimension(400, 150));//设置面板大小 add(panel_n, BorderLayout.NORTH); /** * 头像添加 */ ImageIcon image2 = new ImageIcon( "E:/TDDOWNLOAD/LanJie/src/cn/czm0709/2.jpg"); head = new JLabel(image2); head.setPreferredSize(new Dimension(image2.getIconWidth(), image2 .getIconHeight())); panel_w = new JPanel(); panel_w.setOpaque(false); panel_w.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0)); panel_w.setPreferredSize(new Dimension(100, 300)); panel_w.add(head); add(panel_w, BorderLayout.WEST); /** * 账号密码框添加以及复选框添加 */ panel_c = new JPanel(); panel_c.setOpaque(false); panel_c.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 5)); account = new JComboBox(); account.setEditable(true); account.addItem("88485740"); account.setPreferredSize(new Dimension(200, 28)); panel_c.add(account); jl1 = new JLabel("注册账号"); panel_c.add(jl1);//添加账号输入框 password = new JPasswordField(18); panel_c.add(password);//添加密码框 jl2 = new JLabel("忘记密码"); panel_c.add(jl2);//添加标签 remember = new JCheckBox("记住密码"); remember.setForeground(Color.BLACK); remember.setOpaque(false); panel_c.add(remember);//复选框添加 auto = new JCheckBox("自动登录"); auto.setOpaque(false); auto.setForeground(Color.BLACK); panel_c.add(auto);//复选框添加 add(panel_c, BorderLayout.CENTER); /** * 增加鼠标监听器,实现窗口拖动 */ addMouseMotionListener(new MouseAdapter(){ public void mouseMoved(MouseEvent e){ p = new Point(e.getX() +background.getX(), e.getY() + background.getY()); if((p.x>355 && p.x<400)&&(p.y>0&&p.y<25)){ close.setIcon(new ImageIcon("E:/TDDOWNLOAD/LanJie/src/cn/czm0709/6.jpg")); panel_n.updateUI(); }else{ close.setIcon(new ImageIcon("E:/TDDOWNLOAD/LanJie/src/cn/czm0709/1.jpg")); panel_n.updateUI(); } } public void mouseDragged(MouseEvent e) { setLocation(e.getLocationOnScreen().x-p.x, e.getLocationOnScreen().y-p.y); } }); } /** * 主函数 * @param args */ public static void main(String[] args) { QQ q = new QQ(); q.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); q.setVisible(true); } }
2计算机界面
本例中利用GridLayout,读者也可尝试使用FlowLayout
package cn.czm0709; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; /** * 计算机 * * @author chenzhaomin * */ public class Calculator extends JFrame { private JTextField display; private JPanel buttonPanel; private boolean start; private double result; private String lastCommand; public Calculator() { /** * 框架设置 */ setTitle("计算机"); setSize(200, 250); setLocationRelativeTo(null); // 居中 setResizable(false); // 禁止调整大小 /** * 显示屏设置 */ display = new JTextField("0"); display.setEditable(false);//设置不可编辑 display.setFont(new Font("Serif", Font.PLAIN, 20));// 设置字体 display.setPreferredSize(new Dimension(20, 50));// 设置显示大小 buttonPanel = new JPanel(); buttonPanel.setLayout(new GridLayout(4, 4));//设置网格布局 start = true; result = 0; lastCommand = "="; NumActionListener listener1 = new NumActionListener(); CommandAction listener2 = new CommandAction(); // 加入按钮与监听器 addButton(new JButton("7"), listener1); addButton(new JButton("8"), listener1); addButton(new JButton("9"), listener1); addButton(new JButton("+"), listener2); addButton(new JButton("4"), listener1); addButton(new JButton("5"), listener1); addButton(new JButton("6"), listener1); addButton(new JButton("-"), listener2); addButton(new JButton("1"), listener1); addButton(new JButton("2"), listener1); addButton(new JButton("3"), listener1); addButton(new JButton("*"), listener2); addButton(new JButton("0"), listener1); addButton(new JButton("."), listener1); addButton(new JButton("="), listener2); addButton(new JButton("/"), listener2); add(buttonPanel, BorderLayout.CENTER); add(display, BorderLayout.NORTH); } /** * 定义按钮添加方法 * @param jb * @param listener */ public void addButton(JButton jb, ActionListener listener) { jb.addActionListener(listener); buttonPanel.add(jb); } /** * * 定义数字监听器 * */ private class NumActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String num = e.getActionCommand(); if (start) { display.setText(""); start = false; } display.setText(display.getText() + num); } } /** * *定义运算符监听器 * */ private class CommandAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (start) { if (command.equals("-")) { display.setText("-"); start = false; } else { lastCommand = command; } } else { calculate(Double.parseDouble(display.getText())); lastCommand = command; start = true; } } } /** * * 定义计算方法 */ public void calculate(double x) { if (lastCommand.equals("+")) { result += x; } else if (lastCommand.equals("-")) { result -= x; } else if (lastCommand.equals("*")) { result *= x; } else if (lastCommand.equals("/")) { result /= x; } else if (lastCommand.equals("=")) { result = x; } display.setText("" + result); } /** * 主函数 * @param args */ public static void main(String[] args){ Calculator c = new Calculator(); c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); c.setVisible(true); } }
相关推荐
五年级数学上册4简易方程2解简易方程解方程第一课时课件.ppt
四年级英语上册Unit6Meetmyfamily第五课时同步作业pdf无答案人教PEP
五年级英语下册Unit2Myfavouriteseason第四课时同步作业pdf无答案人教PEP
五年级英语下册Unit 4 Part A第二课时练习题及答案含听力【pep人精选.doc
四年级数学下册第五单元认识方程第3课时等量关系习题课件北师大版202003241115
一年级数学下册第四单元100以内数的认识第4课时数的顺序导学案无答案新人教版202004272104
视频教程
2020春四年级数学下册第四单元三角形第五课时三角形的分类二教案西师大版
2020春四年级数学下册第四单元三角形第五课时整理与复习一教案西师大版
五年级英语下册第四课第四课时PPT学习教案.pptx
视频教程
最新人教版五年级上册数学第四单元.《可能性》教学设计第二课时--.pdf
S版五年级语文下册第四单元课时练习题.doc
PEP四英上Unit6第五课时.ppt
(部编版)道德与法治五年级下册课时练习汇总(含答案).pdf
五年级数学下册第四单元长方体二第4课时长方体的体积1习题课件北师大版202003241187
四年级英语上册Unit5Dinnerisready第五课时同步作业pdf无答案人教PEP
部编版六年级数学上册同步课时练习第四单元比的应用(附答案).pdf
四年级英语上册Unit3Myfriends第四课时同步作业pdf无答案人教PEP
九年级物理下册 第十五章 第4课时 电功率(二)课时训练 苏科版.doc