迷你大刀(JFrame迷你化)

半夜1点了 废话不多说

效果图:    双击以后

思路其实很简单...代码也很少..我也加了少量的注释..看不懂的话..加QQ群..教你

package MiniMizeHack;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;

public class MiniMize implements MouseListener, ActionListener {

    
public JFrame frame;
    
public JPanel panel;
    
public JPopupMenu popup;

    
public JMenuBar menubar;
    
public JLabel top;
    
public JLabel bottom;

    
public MiniMize( ) {
        top 
= new JLabel(new ImageIcon("Image/b3.gif"));
        bottom 
= new JLabel("More configuration here");

        frame 
= new JFrame("Mini Mize");
        panel 
= new JPanel( );
        panel.setLayout(
new BorderLayout( ));
        panel.add(
"North",top);
        panel.addMouseListener(
this);
        frame.getContentPane().add(panel);
        frame.addMouseListener(
this);

        menubar 
= new JMenuBar( );
        JMenu menu 
= new JMenu("File");
        menu.add(
new JMenuItem("Open"));
        menu.add(
new JMenuItem("Quit"));
        menubar.add(menu);

        JMenu window 
= new JMenu("Window");
        JMenuItem mini 
= new JMenuItem("Minimize");
  
//      mini.addActionListener(this);
        window.add(mini);
        menubar.add(window);
        frame.setJMenuBar(menubar);

        popup 
= new JPopupMenu( );
        JMenuItem restore 
= new JMenuItem("Restore");
  
//      restore.addActionListener(this);
        popup.add(restore);
    }


    
public void mousePressed(MouseEvent e) {
        maybeShowPopup(e);
    }


    
public void mouseReleased(MouseEvent e) {
        maybeShowPopup(e);
    }

    
public void mouseExited(MouseEvent e) { }
    
public void mouseEntered(MouseEvent e) { }
    
public void mouseClicked(MouseEvent e) 
        
//=1 就是单击  =2 就是双击
        if(e.getClickCount()==1){
            
        }

        
if(e.getClickCount()==2){
            
//判断bottom是否显示(废话);
            if(bottom.isVisible()) {
        
//        方法调用
                  switchToMini();
               }
 else {
                   switchToNormal();
               }

        }

    }

    
    
private void maybeShowPopup(MouseEvent e) {
        
        
if (e.isPopupTrigger()) {
            popup.show(e.getComponent( ),
                       e.getX(), e.getY());
        }


    }

    
public void actionPerformed(ActionEvent evt) {
       
    }

    
private Dimension normal_size;
    
    
public void switchToMini( ) {
        
        Point location 
= frame.getLocation( );
        
//这个获得frame的Dimension给normal_size(
        
//我感觉这样的变量名我不用解释)一看就懂..(嘿嘿^v^);
        normal_size = frame.getSize( );
        frame.setVisible(
false);
        frame 
= new JFrame( );
        frame.setUndecorated(
true);
        frame.getContentPane( ).add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        bottom.hide( );
        frame.setAlwaysOnTop(
true);

        
// 显示frame 最近越来越喜欢frame.pack();了
        frame.pack( );
        frame.setLocation(location);
        frame.setVisible(
true);

    }

    
public void switchToNormal() {
        
//这方法的代码 跟SwitchToMini大体一样..自己应该能理解
        Point location = frame.getLocation( );
        frame.setVisible(
false);
        frame 
= new JFrame( );
        frame.setUndecorated(
false);
        frame.getContentPane( ).add(panel);
        
        bottom.show();
        frame.setJMenuBar(menubar);
        frame.setAlwaysOnTop(
false);

        frame.pack();
        frame.setSize(normal_size);
        frame.setLocation(location);
        frame.setVisible(
true);
    }

    
public static void main(String[] args) {
        MiniMize mini 
= new MiniMize( );
        mini.frame.pack( );
        mini.frame.setSize(
300,300);
        mini.frame.setVisible(
true);
    }

}


posted on 2008-05-30 01:12 相信 阅读(731) 评论(1)  编辑  收藏 所属分类: Swing文章

评论

# re: 迷你大刀(JFrame迷你化) 2008-05-30 02:37 晴天

// 显示frame 最近越来越喜欢frame.pack();了

我一般是写一个静态类,然后传几个参数进去,随便弄个窗体出来的,代码重用的.
没那么多时间每次写显示Jframe那几行代码啊....还要玩游戏呢~~  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

公告

不显示applet

常用链接

留言簿(16)

我参与的团队

随笔档案

文章分类

文章档案

新闻档案

相册

swingchina 专业搞Swing的网站

搜索

最新评论

阅读排行榜

评论排行榜