java自定义窗口风格.docx_第1页
java自定义窗口风格.docx_第2页
java自定义窗口风格.docx_第3页
java自定义窗口风格.docx_第4页
java自定义窗口风格.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java 自定义窗口风格大家有的时候是不是会觉得java默认的窗口风格,很单一、古板,不好看,希望自己搞些漂亮的风格(如qq登陆界面)。看下面两张图:Java 默认的窗口风格:本程序实现的风格:很多时候,我们是需要下面的风格的,而java又不提供现成的方法,这就要我们自己去写代码实现。要想自己定义java窗口的风格,首先应取消java自带的默认风格,用JFrame里的setUndecorated(true);方法可以取消默认风格,然后自己重画最大、最小、关闭按钮,需要注意的是,取消默认风格后,要想再移动窗口,需要自己再编写类来处理事件,下面粘贴完整的代码,给那些想自定义窗口风格的童鞋以帮助,希望高手勿喷。1主程序:package MyPanel;import javax.swing.*;public class MyFrame extends JFrame public MyFrame() this.setUndecorated(true);this.setBounds(300, 200, 348, 265);;init();this.validate();public void init() this.setTitle(自定义窗口风格);MyPanel pane = new MyPanel(MyPanel.CLOSE_MIN_MAX, picture/picture.jpg);pane.setFrame(this);MyListener moveListener = new MyListener(this);this.addMouseListener(moveListener);this.addMouseMotionListener(moveListener);this.setContentPane(pane);this.setVisible(true);public static void main(String args) new MyFrame();2事件处理类:package MyPanel;import java.awt.Point;import java.awt.Rectangle;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;public class MyListener extends MouseAdapter private Point lastPoint = null;private MyFrame window = null;public MyListener(MyFrame window) this.window = window;public void mousePressed(MouseEvent e) lastPoint = e.getLocationOnScreen();public void mouseDragged(MouseEvent me) Point point = me.getLocationOnScreen();int offsetX = point.x - lastPoint.x;int offsetY = point.y - lastPoint.y;Rectangle bounds = window.getBounds();bounds.x += offsetX;bounds.y += offsetY;window.setBounds(bounds);lastPoint = point;3MyPanel类:package MyPanel;import java.awt.Graphics;import java.awt.Image;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JPanel;public class MyPanel extends JPanel public final static int CLOSE_ONLY = 1;public final static int CLOSE_MIN = 2;public final static int CLOSE_MIN_MAX = 3;private Image ime;private MyButton button = null;public MyPanel(int style, String url) button = new MyButtonstyle;if (style = CLOSE_ONLY)button0 = new CloseButton(30, 20, 2);else if (style = CLOSE_ONLY) button0 = new CloseButton(30, 20, 2);button1 = new MinButton(30, 20, 2); else button0 = new CloseButton(30, 20, 2);button1 = new MaxButton(30, 20, 2);button2 = new MinButton(30, 20, 2);ime = new ImageIcon(url).getImage();this.setLayout(null);this.init();public void init() for (int i = 0; i button.length; i+)this.add(buttoni);public void setFrame(JFrame window) for (int i = 0; i button.length; i+)buttoni.setFrame(window);public void paintComponent(Graphics g) super.paintComponent(g);g.drawImage(ime, 0, 0, this.getWidth(), this.getHeight(), null);for (int i = 0; i button.length; i+)buttoni.setBounds(this.getWidth() - i * 30 - 30, 0, 30, 20);4MyButton类:package MyPanel;import java.awt.Color;import javax.swing.JButton;import javax.swing.JFrame;abstract public class MyButton extends JButton protected int width;protected int height;protected int padding;protected Color back, fore;public abstract void setFrame(JFrame window);5关闭按钮:package MyPanel;import java.awt.Color;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.JFrame;public class CloseButton extends MyButton implements ActionListener private JFrame window;public CloseButton(int width, int height, int padding) this.width = width;this.height = height;this.padding = padding;back = null;fore = Color.white;this.setContentAreaFilled(false);this.setBorderPainted(false);this.addActionListener(this);this.addMouseListener(new MouseAdapter() public void mouseEntered(MouseEvent me) back = Color.red;fore = Color.white;repaint();public void mouseExited(MouseEvent me) back = null;fore = Color.white;repaint(););public void setFrame(JFrame window) this.window = window;public void paintComponent(Graphics g) super.paintComponent(g);if (back != null) g.setColor(back);g.fillRect(this.getWidth() - width, 0, width, height);this.drawClose(g, fore, this.getWidth() - width / 2, height / 2,padding);private void drawClose(Graphics g, Color color, int x, int y, int padding) g.setColor(color);int arrayx1 = x - 3 * padding, x - 2 * padding, x, x + 2 * padding,x + 3 * padding, x + padding, x + 3 * padding, x + 2 * padding,x, x - 2 * padding, x - 3 * padding, x - padding ;int arrayy1 = y + 2 * padding, y + 3 * padding, y + padding,y + 3 * padding, y + 2 * padding, y, y - 2 * padding,y - 3 * padding, y - padding, y - 3 * padding, y - 2 * padding,y ;g.fillPolygon(arrayx1, arrayy1, 12);public void actionPerformed(ActionEvent ae) this.window.dispose();System.exit(0);6最小化按钮:package MyPanel;import java.awt.Color;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.JFrame;public class MinButton extends MyButton implements ActionListener private JFrame window;public MinButton(int width, int height, int padding) this.width = width;this.height = height;this.padding = padding;back = null;fore = Color.white;this.setContentAreaFilled(false);this.setBorderPainted(false);this.addActionListener(this);this.addMouseListener(new MouseAdapter() public void mouseEntered(MouseEvent me) back = Color.blue;fore = Color.white;repaint();public void mouseExited(MouseEvent me) back = null;fore = Color.white;repaint(););public void setFrame(JFrame window) this.window = window;public void paintComponent(Graphics g) super.paintComponent(g);if (back != null) g.setColor(back);g.fillRect(this.getWidth() - width, 0, width, height);this.drawMin(g, fore, this.getWidth() - width / 2, height / 2, padding);private void drawMin(Graphics g, Color color, int x, int y, int padding) g.setColor(color);int arrayx1 = x - 3 * padding, x + 3 * padding, x + 3 * padding,x - 3 * padding ;int arrayy1 = y, y, y + 3 * padding / 2, y + 3 * padding / 2 ;g.fillPolygon(arrayx1, arrayy1, 4);public void actionPerformed(ActionEvent ae) this.window.setExtendedState(JFrame.ICONIFIED);7最大化按钮:package MyPanel;import java.awt.Color;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.JFrame;public class MaxButton extends MyButton implements ActionListener private JFrame window;public MaxButton(int width, int height, int padding) this.width = width;this.height = height;this.padding = padding;back = null;fore = Color.white;this.setContentAreaFilled(false);this.setBorderPainted(false);this.addActionListener(this);this.addMouseListener(new MouseAdapter() public void mouseEntered(MouseEvent me) back = Color.blue;fore = Color.white;repaint();public void mouseExited(MouseEvent me) back = null;fore = Color.white;repaint(););public void setFrame(JFrame window) this.window = window;public void paintComponent(Graphics g) super.paintComponent(g);if (back != null) g.setColor(back);g.fillRect(this.getWidth() - width, 0, width, height);if (this.window.getExtendedState() != JFrame.MAXIMIZED_BOTH)this.drawMax(g, fore, this.getWidth() - width / 2, height / 2,padding);elsethis.drawRec(g, fore, this.getWidth() - width / 2, height / 2,padding);private void drawRec(Graphics g, Color color, int x, int y, int padding) g.setColor(color);int arrayx1 = x - 3 * padding, x + 2 * padding, x + padding,x - 2 * padding ;int arrayy1 = y - 2 * padding, y - 2 * padding, y - padding,y - padding ;g.fillPolygon(arrayx1, arrayy1, 4);int arrayx2 = x + padding, x + 2 * padding, x + 2 * padding,x + padding ;int arrayy2 = y - padding, y - 2 * padding, y + 3 * padding,y + 2 * padding ;g.fillPolygon(arrayx2, arrayy2, 4);int arrayx3 = x + padding, x + 2 * padding, x - 3 * padding,x - 2 * padding ;int arrayy3 = y + 2 * padding, y + 3 * padding, y + 3 * padding,y + 2 * padding ;g.fillPolygon(arrayx3, arrayy3, 4);int arrayx4 = x - 2 * padding, x - 3 * padding, x - 3 * padding,x - 2 * padding ;int arrayy4 = y + 2 * padding, y + 3 * padding, y - 2 * padding,y - padding ;g.fillPolygon(arrayx4, arrayy4, 4);int arrayx5 = x - 2 * padding + padding / 2,x + 3 * padding + padding / 2, x + 3 * padding + padding / 2,x + 2 * padding + padding / 2, x + 2 * padding + padding / 2,x - 2 * padding + padding / 2 ;int arrayy5 = y - 3 * padding - padding / 2,y - 3 * padding - padding / 2, y + 2 * padding - padding / 2,y + 2 * padding - padding / 2, y - 2 * padding - padding / 2,y - 2 * padding - padding / 2 ;g.fillPolygon(arrayx5, arrayy5, 6);private void drawMax(Graphics g, Color color, int x, int y, int padding) g.setColor(color);int arrayx1 = x - 2 * padding, x - 3 * padding, x + 3 * padding,x + 2 * padding ;int arrayy1 = y - 2 * padding, y - 3 *

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论