浏览 4931 次
锁定老帖子 主题:Swing界面优化进阶二
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2015-05-17
最后修改:2015-05-18
http://www.iteye.com/topic/1137293 http://www.iteye.com/topic/1138087 背景有了,那我们是否注意到右上角的按钮以及他的边框,这些地方还是需要优化、 边框修饰,我们需要考虑几点: 第一,我们需要将原始的边框去掉; 第二,去掉原始边框之后,右上角按钮没有了; 第三,去掉边框之后,拖动窗体的功能没有了; 去边框,java已经提供了一个现成的方法setUndecorated(true),此方法可以将上下左右的边框去掉,只显示出中间区域 代码:大家这里注意下,截图里面说的有点问题,不好意思,主窗体可以使用exit_on_close,这个取决于用户需要一般是可以由用户设置的,但是在聊天的窗体上,那就一定不能加上exit了,否则会将整个程序都关掉 边框去掉了,我们来加上按钮,以及每个按钮的功能 这里按钮放大缩小功能截图看不了,我直接给大家看代码: public class Demo1 extends JFrame { private JPanel content; private JLabel minButton; private JLabel maxButton; private JLabel exitButton; private Point point = new Point(); public Demo1() { initGUI(); initListener(); } /** * 初始化界面 */ private void initGUI() { setSize(450, 350); setTitle("course"); // 去边框 setUndecorated(true); // // 去边框了,这句就可以不要了 // setDefaultCloseOperation(EXIT_ON_CLOSE); // 原生态 // content = new JPanel(); // 重写里面的paintComponent方法 content = new JPanel() { @Override protected void paintComponent(Graphics g) { // 这一句可以清除之前绘制的图像,在这个例子中看不出来效果,若是java做画图板的程序就能看出来 super.paintComponent(g); // 此方法有很多种,看的眼花缭乱,了解参数了就好多了,这里说一下基本的 // 1:image对象 // 2:重绘的起始横坐标 // 3:重绘的起始纵坐标 // 4:重绘的宽度 // 5:重绘的高度 // 6:一个实现ImageObserver 接口的对象。它将该对象登记为一个图像观察者,因此当图像的任何新信息可见时它被通知。大多组件可以简单的指定this或null // 组件可以指定this作为图像观察者的原因是Component类实现了ImageObserver接口。当图像数据被加载时它的实现调用repaint方法 g.drawImage(produceImage("back0.png").getImage(), 0, 0, getWidth(), getHeight(), null); } }; content.setLayout(null); getContentPane().add(content); minButton = new JLabel(); minButton.setBounds(357, 0, 31, 20); minButton.setIcon(produceImage("min.png")); content.add(minButton); maxButton = new JLabel(); maxButton.setBounds(383, 0, 31, 20); maxButton.setIcon(produceImage("max.png")); content.add(maxButton); exitButton = new JLabel(); exitButton.setBounds(411, 0, 39, 20); exitButton.setIcon(produceImage("close.png")); content.add(exitButton); } /** * 初始化鼠标事件 */ private void initListener() { // 窗体事件,用于拖动窗体位置 this.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { point.x = e.getX(); point.y = e.getY(); } }); this.addMouseMotionListener(new MouseAdapter() { @Override public void mouseDragged(MouseEvent e) { Point p = getLocation(); setLocation(p.x + e.getX() - point.x, p.y + e.getY() - point.y); } }); // 最小化按钮事件 minButton.addMouseListener(new MouseAdapter() { @Override public void mouseExited(MouseEvent e) { minButton.setIcon(produceImage("min.png")); } @Override public void mouseEntered(MouseEvent e) { minButton.setIcon(produceImage("min_active.png")); } @Override public void mouseReleased(MouseEvent e) { setExtendedState(Frame.ICONIFIED); } }); // 最大化按钮事件 maxButton.addMouseListener(new MouseAdapter() { @Override public void mouseExited(MouseEvent e) { if (getExtendedState() != Frame.MAXIMIZED_BOTH) { maxButton.setIcon(produceImage("max.png")); } else { maxButton.setIcon(produceImage("restore.png")); } } @Override public void mouseEntered(MouseEvent e) { if (getExtendedState() != Frame.MAXIMIZED_BOTH) { maxButton.setIcon(produceImage("max_active.png")); } else { maxButton.setIcon(produceImage("restore_active.png")); } } @Override public void mouseReleased(MouseEvent e) { // 若是最大化过了,就直接还原大小 if (getExtendedState() == Frame.MAXIMIZED_BOTH) { setSize(450, 350);// 还原大小 setLocationRelativeTo(null);// 这里需要重新设置坐标 maxButton.setIcon(produceImage("max.png")); } else { setExtendedState(Frame.MAXIMIZED_BOTH); maxButton.setIcon(produceImage("restore.png")); } // 按比例放置按钮 fixedButtonPoint(); } }); // 退出按钮事件 exitButton.addMouseListener(new MouseAdapter() { @Override public void mouseExited(MouseEvent e) { exitButton.setIcon(produceImage("close.png")); } @Override public void mouseEntered(MouseEvent e) { exitButton.setIcon(produceImage("close_active.png")); } @Override public void mouseReleased(MouseEvent e) { System.exit(0); } }); } /** * 按比例放置按钮,不管放大还是缩小窗体,按钮永远在右上角 */ private void fixedButtonPoint() { // 里面这些39、28的数字是自己的算法比例 minButton.setBounds(getWidth()-39-28-28, 0, 31, 20); maxButton.setBounds(getWidth()-39-28, 0, 31, 20); exitButton.setBounds(getWidth()-39, 0, 39, 20); } /** * 获取图片 * @param name 图片名称 * @return */ private ImageIcon produceImage(String name) { ImageIcon backImage = new ImageIcon(getClass().getClassLoader().getResource(name)); return backImage; } public static void main(String[] args) { Demo1 demo1 = new Demo1(); demo1.setVisible(true); demo1.setLocationRelativeTo(null); } } 代码大家可以前去 进阶三 下载,欢迎大家多多与我交流沟通。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2015-05-20
小湿妹,牛逼啊
|
|
返回顶楼 | |
发表时间:2015-05-20
eric_hwp 写道 小湿妹,牛逼啊
哎哟喂,我的个神,这都能被你认出来 |
|
返回顶楼 | |
发表时间:2015-05-22
有很多线程的也很好看的哦:http://www.oschina.net/p/beautyeye
|
|
返回顶楼 | |
发表时间:2015-05-24
15000346240 写道 有很多线程的也很好看的哦:http://www.oschina.net/p/beautyeye
是的,这个很漂亮,我之前有用过 |
|
返回顶楼 | |