Java swing 组件大全

时间:2023-01-26 18:55:23
import javax.swing.*; va-鰞  
獅擓螴觯穫  
import java.awt.*; ?廟廬KS  
import java.awt.event.*; :_驘嚏ぅ  
import javax.swing.tree.*; ┭耑?T裧? 
import javax.swing.event.*; 機/鍆懾  
import javax.swing.border.*; ?T妹  
import javax.swing.table.*; ?Up暯#?7  
蟿醪划篾 ? 
/** ?~圓棡Q}  
* Swing 组件测试程序 mJ@函#鬲? 
* 测试Swing所有组件及其相应的事件 ?迮?ZJ疙  
*/ ?€腺榖p  
public class SwingTest extends JFrame 莢U9"锬ゞ? 
{ ;?n$勷N煐  
  /** `鞷??O躛  
  * 主模块,初始化所有子模块,并设置主框架的相关属性 阒????  
  */ }淧?鋿秳  
  public SwingTest() T塺┍餛j  
  { 棌~?s?,? 
    // 初始化所有模块 3?gAw  
    MenuTest menuTest = new MenuTest(); 藔鱹莍kH.k  
    LeftPanel leftPanel = new LeftPanel(); ? 7佧/;?  
    RightPanel rightPanel = new RightPanel(); rAY霥l  
    BottomPanel bottomPanel = new BottomPanel(); $:鶋摱q悿? 
    CenterPanel centerPanel = new CenterPanel(); -|J?k1⑻  
    t噙摯淇P  
    // 设置主框架的布局 }珥噰m0? 
    Container c = this.getContentPane(); 抍萐U,€"?  
    // c.setLayout(new BorderLayout()) ?擽?c  
    this.setJMenuBar(menuTest); 媈AL+  
    x髙魢犍洦,  
    c.add(leftPanel,BorderLayout.WEST); ??g矙潥  
    c.add(rightPanel,BorderLayout.EAST); r鵑.$嫩?  
    c.add(centerPanel,BorderLayout.CENTER); 宿X挛0r? 
    c.add(bottomPanel,BorderLayout.SOUTH); ;樕箓郛X呫  
    3≈Km?鈏  
    // 利用无名内隐类,增加窗口事件 廦遴痵V鉳? 
    this.addWindowListener(new WindowAdapter() mo沦}構? 
        { D姩钿.櫕擙  
          public void WindowClosing(WindowEvent e) 淡j噮3話?  
          {   烢_?抉W蓦  
            // 释放资源,退出程序 ?lt;狧仼Q  
            dispose(); E@瀐挽? 
            System.exit(0); 6e?q椑DB? 
          } J淂羷 ?? 
        }); ?擂?X(髂  
        镃桥(彈獆  
    l?}#屽縌? 
    積R嚶撊%傐  
    setSize(700,500); 炑?!??  
    setTitle("Swing 组件大全简体版"); 揙VQ=*?鵏  
    // 隐藏frame的标题栏,此功暂时关闭,以方便使用window事件 ?<縦樄綿  
    // setUndecorated(true); 睴vZ 甬騼  
    setLocation(200,150); 嫹?K?9M? 
    show();     >EN焫哗[  
  } e踴#S茑t  
,W忟e塸慣v  
  //////////////////////////////////////////////////////////////////////////// 僷:?6<邯  
  /** 鐃,S8o炅擟  
  * 菜单栏处理模块 騈4猫発S哦  
  * JMenuBar --+ ?-?)?  
  *         --JMenu--+ 盱?虉N糠5  
  *               --JMenuItem --ActionListener $bY洈セ?  
  *         c(6旉*  
  */ 拵/?k? 
  class MenuTest extends JMenuBar 觾p錭?_榋  
  { E蝿獐釀F呐  
    private JDialog aboutDialog; 顸葸Do~? 
        杀p鑘N5kG? 
    /** 閑勘6锳  
      * 菜单初始化操作 =煁?鸦畏? 
      */   `v矪玞話  
    public MenuTest() 凕?^? 
    { 甬?痘? 
        JMenu fileMenu = new JMenu("文件"); 驫裬? ?  
        JMenuItem exitMenuItem = new JMenuItem("退出",KeyEvent.VK_E); 澃l5.? 
        JMenuItem aboutMenuItem = new JMenuItem("关于...",KeyEvent.VK_A);         /?絣篈 ? 
                                垒c崸槍? 
        fileMenu.add(exitMenuItem); 旄酼fz廰,%  
        fileMenu.add(aboutMenuItem); ?勒/vA:?  
        &郛踺Ι? 
        this.add(fileMenu);     ?堺坿 sn綆  
        W奖遊杔  
            ShZf?缡朲  
        aboutDialog = new JDialog(); 烌鏛|   
        initAboutDialog(); 鴴櫪茞羏萋  
                蜇UG46骲  
        // 菜单事件 T^漻/M  
        exitMenuItem.addActionListener(new ActionListener() U?f/?@銓  
        { 5R礩 9Z獖  
          public void actionPerformed(ActionEvent e) 8`^{€?淿? 
          { 帅}赫?蟊  
            dispose(); q匓#鳥/ ? 
            System.exit(0); d*護? n? 
          } U 旞[?a? 
        }); 盙7f魏:刾  
        錎惥鶼?}  
        aboutMenuItem.addActionListener(new ActionListener() 篓IqS)教臡  
        { .!/0c橑屶n  
          public void actionPerformed(ActionEvent e) g*%n€豜V?  
          { 搧陯靌Kw?  
            // "关于"对话框的处理 魒闏?柑&  
            aboutDialog.show(); 橴?ac^? 
          } O;籍f"鳏? 
        });         ?/鑠[?C  
                抛uua亀  
    } 棌??lt;?:? 
    龌諰 R€?  
    /** 搂Kd&溝飧  
      * 返回关于对话框 钼m?t歖B[  
      */ 鴫'樔g ;h  
    public JDialog getAboutDialog() 州(?3? 
    { *6?u荎悇  
        return aboutDialog; /油"〕苰  
    } 贅佟鋰逛  
    ま桇彟?X  
    /** 曞4q髪覇鲁  
      * 设置"关于"对话框的外观及响应事件,操作和JFrame一样都是在内容 ?陥?騄輥  
      * 框架上进行的 mb葹8FS? 
      */ 6)婡K湖即? 
    public void initAboutDialog() ?砂tx9r? 
    { 1r#寈?翀? 
        aboutDialog.setTitle("关于"); 没P悟X妘kH  
        捵7柶V{  
        Container con =aboutDialog.getContentPane(); ~煥?I蔯? 
        河N蘼覾@  
        // Swing 中使用html语句 韩橱粿恷'? 
        Icon icon = new ImageIcon("smile.gif"); 偰i駷yI盅  
        JLabel aboutLabel = new JLabel("<html><b><font size=5>"+ 逩沀燜U嫋8  
        "<center>Swing 组件大全简体版!"+"<br>天翼.李",icon,JLabel.CENTER); I骨f弫壾X  
                鑩?8p?? 
        //JLabel aboutLabel = new JLabel("Swing 组件大全简体版!",icon,JLabel.CENTER); B?孶q狆?  
        con.add(aboutLabel,BorderLayout.CENTER); p o琓炚? 
        ∪毃"﹟席  
        aboutDialog.setSize(450,225); U9?喟鳨? 
        aboutDialog.setLocation(300,300);                 癫?訳  
        aboutDialog.addWindowListener(new WindowAdapter() 崴*p憸 h? 
        { 弲骥帷 /l  
          public void WindowClosing(WindowEvent e) ;?訡飊? 
          { ?'3T鍲埢? 
            dispose(); 鯐國衏W-"  
          }             鮄?]!)L  
        });         ??TNe?(  
    } 峧禱讜zN  
  } >璪镔??? 
  T浄`?枭? 
  //////////////////////////////////////////////////////////////////////////// O|'.hS4? 
  /** 鄭VXk2? 
  * 最左边模块,继承JPanel,初始化内容为JTree 藴[偪僱e'  
  * JPanel--+ ?闐夘?? 
  *       --JTree Y絶(V(??  
  */ 鷮5z译^  
  class LeftPanel extends JPanel 澱?悪霓趴  
  { s?+胛碊扮  
    private int i = 0; n +壵 E>? 
    public LeftPanel() |}髢諤?_  
    { 8jG洽?汔  
        莓?68秾鎴  
        DefaultMutableTreeNode   root = new DefaultMutableTreeNode("Root"); 轏怹K0氯嗊  
        DefaultMutableTreeNode child = new DefaultMutableTreeNode("Child"); $ǐ6c恎? 
        DefaultMutableTreeNode select = new DefaultMutableTreeNode("select"); ;鸦谳}?N  
        G╖??馫  
        DefaultMutableTreeNode child1 = new DefaultMutableTreeNode(""+i); 寂t ?? 
        ?佒?  
        root.add(child);     ^BL愃|krfJ  
        root.add(select); 1V?祂? 
        child.add(child1);   k /詀锦~  
        aV蒪W附d  
        JTree tree = new JTree(root); @弸?-錌繖  
        tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); y洙;?@?e  
        j眸椭/?矁  
        // 每个节点的行高 ??-訞  
        tree.setRowHeight(20);         fh┈ ?匐? 
        tree.addTreeSelectionListener(new TreeSelectionListener () c桗N€w↗TQ  
        { /? @Y,  
          public void valueChanged(TreeSelectionEvent e) 蕺胑蘿  
          { '=髃 Tx櫞? 
            // 内隐类不能直接引用外部类tree,1.外部变量可申明为final 2.新建外部类的对象 飔?嘃? 
            JTree tree =(JTree)e.getSource(); :蟒=鈤砓j}  
            DefaultMutableTreeNode selectNode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); 0? :3 3#? 
            i++; PXz`'2Y  
            selectNode.add(new DefaultMutableTreeNode(""+i)); "縢礔k為  
          } a墼D阺⑻? 
        });         0KY皾?+h=  
        442-? 
        tree.setPreferredSize(new Dimension(100,300)); z旹鱵唂哸? 
    //   tree.setEnabled(true); b?2 ?章  
        JScrollPane scrollPane = new JScrollPane(tree); ⒓銨;鬰倩? 
        //scrollPane.setSize(100,350); ?讀瞃?S  
        this.add(scrollPane); 鄛互J绋湼  
    } /歾朔3?禄  
  } LS?Ui*? 
  ^n c ?  
  //////////////////////////////////////////////////////////////////////////// ?;轎畨?? 
  /** B/#)吺拧锢  
  * 最下面层模块,继承JPanel,初始化内容为进度条,并由定时器控制 骿E懁嫕胩i  
  * JPanel--+ /瀙0?? 
  *       --JProcessBar --Timer 惜?V敿艝l  
  */ 鳽紩4卷蒯  
  class BottomPanel extends JPanel s?J镉B?? 
  { 踹縉庑眍瘲  
    private JProgressBar pb; ?lt;襍蜦肭  
    //////////////////////////////////////// 齘P{x郊  
    //public class ?"<萹?  
    ////////////////////////////// u?q珦h飃h  
    public BottomPanel() ?}菹%仺? 
    { 膆?稗  
        pb = new JProgressBar(); 顸&N#_P?  
        pb.setPreferredSize(new Dimension(680,20)); 敗=???@  
        蕂m媹'5nS  
        // 设置定时器,用来控制进度条的处理 ?蛣衫!縂? 
        Timer time = new Timer(1,new ActionListener() ??U双?? 
        { o#橞耣&? 
          int counter = 0; 饑錹1  
          public void actionPerformed(ActionEvent e) 蕮剡洐$?? 
          { W?汻J ? 
            counter++; ?鮥?莚? 
            pb.setValue(counter); 6?n@P*?  
            Timer t = (Timer)e.getSource(); }c=檸讞Bm  
            Vz倻IqYi? 
            // 如果进度条达到最大值重新开发计数 (匚(篓6  
            if (counter == pb.getMaximum()) 琽T€艊蒁浕  
            { 絺dt褽欐誣  
                t.stop(); ?熳?lt;ゲQ  
                counter =0; 帩F4!?櫫? 
                t.start(); ed趣J0  
            }             漞做瞇&?  
          } 嫅wW[熰? 
        }); E呆P魯{  
        time.start(); ?牬/O?  
        5}?ぎ?  
        pb.setStringPainted(true); 鸱漹?啌  
        pb.setMinimum(0); A8挠槭qxH? 
        pb.setMaximum(1000); b#!<e2;抎? 
        pb.setBackground(Color.white); "?Xd杋? 
        pb.setForeground(Color.red); w炴èO1凸Y  
                nJx瀱NM轉  
        this.add(pb);           LL5F?|~? 
    } ??嬄<Lb? 
    ?jl辛诪a  
    /** q/(錷?_  
      * 设置进度条的数据模型 ?? 钷喫  
      */ j夸i胄O  
    public void setProcessBar(BoundedRangeModel rangeModel) v吝 Yh╮||  
    { _??s? 
        pb.setModel(rangeModel); ??职銍fp  
    } 弑?€-頶O  
  } .楊遴鞧3嬈  
  ?詑51旦!  
  //////////////////////////////////////////////////////////////////////////// 朰&/?圓  
  /** 熲独 跶?  
  * 最右边模块,继承JPanel,初始化各种按钮 毅苸bGR3?  
  * JPanel--+ 捠?€疚飁? 
  *       --JButton --JToggleButton -- JList -- JCombox --JCheckBox .... ,戕蘲??  
  */ ?V狹洉M? 
  class RightPanel extends JPanel ? je  
  { 轞 J]韣  
    public RightPanel() K#,?⑻偓r  
    { VH ?笱﹌  
        this.setLayout(new GridLayout(8,1));     鴶貲=sQ咡? 
        髼|c桨痆q? 
        稣Y6<j娼.  
        // 初始化各种按钮 t?h=孄困寠  
        JCheckBox checkBox = new JCheckBox("复选按钮");         ?匾"跺;  
        JButton button = new JButton("打开文件"); h暈-#,}? 
        button.addActionListener(new ActionListener() h?眅摑4&  
        { ??Vk?  
          public void actionPerformed(ActionEvent e) f?眕溚IE  
          { 丳/k ON? 
            JFileChooser file = new JFileChooser(); 霦F,缿7y]  
            int result = file.showOpenDialog(new JPanel()); I稈/S??  
            if (result ==file.APPROVE_OPTION) CTd暭鶊栋G  
            { Kh逌?K鄣  
                String fileName = file.getSelectedFile().getName();             ?<n5{J率  
                String dir = file.getCurrentDirectory().toString(); ?z瓟SO? 
                JOptionPane.showConfirmDialog(null,dir+"//"+fileName,"选择的文件",JOptionPane.YES_OPTION); 釋萛欛S  
              } C??糊/怉  
          } b枏:释A? 
        }); 6=貏??!? 
        //////////////////////////////////////// 頏B鐎锔f  
        //public ?漂亪騵癈  
        ////////////////////////////////////////// nRJ圅`謕  
            偙?惮c? 
        JToggleButton toggleButton = new JToggleButton("双态按钮"); 楎-r菂鞞  
        1 ?蟟~sW? 
        ButtonGroup   buttonGroup = new ButtonGroup(); dh>嚻?? 
        JRadioButton radioButton1 = new JRadioButton("单选按钮1",false); 0^z匈  
        JRadioButton radioButton2 = new JRadioButton("单选按钮2",false); 嗨觚 T{J$  
        ?錅?釭簓  
        // 组合框的处理 N魳:kL€?  
        JComboBox comboBox = new JComboBox(); N紗溿H)?  
        comboBox.setToolTipText("点击下拉列表增加选项"); [鹍瀛坩#  
        comboBox.addActionListener(new ActionListener() ?鲩涗澇Y  
        { +??无溰o  
          public void actionPerformed(ActionEvent e) ??懴眔7? 
          { 漁dY屖?錙  
            JComboBox comboBox =(JComboBox)e.getSource(); t?v?  
            comboBox.addItem("程序员"); 唩??骑  
            comboBox.addItem("分析员"); 蜬T拪Um?  
          } ?唚?監  
        }); 櫺骮G~M壍I  
        堆W鑹瑫/?  
        // 列表框的处理 /<NN葉?  
        DefaultListModel litem = new DefaultListModel(); ?:m闶b?  
        litem.addElement("香蕉"); W荤K屿?? 
        litem.addElement("水果"); Gx8B蜝剉葥  
        JList list = new JList(litem); 稠銂四!|? 
        )?4ㄤ俇? 
        歮DR犞?? 
        list.addListSelectionListener(new ListSelectionListener () ?~?澎?X  
        { 5鐂U 瀴p  
          public void valueChanged(ListSelectionEvent e) Qr?S錉澙  
          { 檻Gx_?K? 
            JList l = (JList)e.getSource(); 題+m?? 
            Object s= l.getSelectedValue(); t屵q %  
            JOptionPane.showMessageDialog(null,s,"消息框",JOptionPane.YES_OPTION); 圎舚?脂{? 
          } w痫0:檩? 
        }); dq`砺y攌  
        锕褛頽祓7  
        // 增加按钮组 jm?Mf杗+t  
        buttonGroup.add(radioButton1); Ib籺裯霷G  
        buttonGroup.add(radioButton2); 皱?x$骈K  
        顽讇V煥'  
        // 增加各种按钮到JPanel中显示 ( 徬?[? 
        add(button); KA8咂脇g  
        add(toggleButton); CMtp?lt;辙  
        add(checkBox); ?~?yH  
        add(radioButton1);         否? ╊?  
        add(radioButton2); ∨蒚4攃俒h  
        add(comboBox); F粆鋘n々  
        嶙#狁韣*幈  
        add(list); ?ˋщ? 
        咶?衽z?  
        this.setBorder(new EtchedBorder(EtchedBorder.LOWERED,Color.LIGHT_GRAY,Color.blue)); ^倦?í?? 
    }     ┢??槑  
  } ?lt;躑鑘"Z? 
  NV鐡竵?{`W  
  //////////////////////////////////////////////////////////////////////////// ]? 回溜錿  
  /** ?w0叟n&r/  
  * 中间层模块,继承JPanel,初始化页签,并在页签中设置文本区,表格, /霏 柤#踿  
  * 文本区上下用分隔条分隔 hQ?璗F? 
  * JPanel--+ p$鈘遑/? 
  *       -JTabbedPane--+ ??辛'  
  *                 --Draw   --JTable -JTextAreas -JText --JPopupMenu R蕟?暢碶? 
  */ s炮槟eX吼q  
  class CenterPanel extends JPanel 戞仚)s嘔  
  { &峭馎鎈  
    public CenterPanel() 拮?鞰/?  
    { C?2?j嫿? 
        JTabbedPane tab = new JTabbedPane(JTabbedPane.TOP); u??夈醴? 
        涄︱&e琗  
        JTextField textField = new JTextField("文本域,点击打开<文件按钮>可选择文件"); 酡 黈??  
        textField.setActionCommand("textField"); 窌??? 
        黜Q |5冤? 
        JTextPane textPane = new JTextPane(); 9&??挙f  
        textPane.setCursor(new Cursor(Cursor.TEXT_CURSOR)); ?p払%?  
        textPane.setText("编辑器,试着点击文本区,试着拉动分隔条。"); p匭&魻? 
                €Uか&Ia|? 
        textPane.addMouseListener(new MouseAdapter () ??G.NEt  
        { 矝?3/瘆? 
          public void mousePressed (MouseEvent e) 敗Abj┄"? 
          { ? 疜炔  
            JTextPane textPane = (JTextPane)e.getSource(); )22})崸B$  
            textPane.setText("编辑器点击命令成功"); 猑?似┩T? 
          //   textField.setText(""+textPane.getText()); ?聺茴(?鱘  
          } ?O錮0KPu  
        }); 挾腡淄  
        m{?媘g<}  
        /* €x毊縫. ? 
        UpperCaseDocument doc = new Document(); .WY觃@袼? 
        textField.setDocumentsetDocument(doc); "k烄8攏耝? 
        doc.addDocumentListener(new DocumentListener() 飪$皣0鏓<  
        { 智p欳?藡  
          public void changedUpdate(DocumentEvent e){} ? ?  
          public void removeUpdate(DocumentEvent e){} 狔?遼??  
          public void insertUpdate(DocumentEvent e) ╗>蚍"wP  
          { 柞扱萛?iz  
            Document text = (Document)e.getDocument(); ?戺呒咖? 
            text.setText("复制成功"); V笡駠糝遒? 
          }           )?$谜Y? 
        }); ??`Ez呲宄  
        */ mH [h? 
        )寢峫俯J  
        JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,textField,textPane); 挔綆祔8?  
        鷷郍/GJ?? 
          徤漬)╅稽P  
        JTable table = new JTable(10,10); 浗.骋?J? 
        //table.showHorizontalLines(true); 2Q鹑擸A  
        //table.showVerticalLines(true); 巩€舏2鉀鱄  
        //table.gridColor(Color.blue); d+aFu? ?  
        }?谐-i螭? 
        JPanel pane = new JPanel(); ?稊t郇 ? 
        pane.add(table.getTableHeader(),BorderLayout.NORTH); `x?輑? 
        pane.add(table); 綫7霬2C伇d  
                C櫚呵灌y? 
        tab.addTab("文本演示",splitPane); ?;4>…cJ  
        //tab.addTab(table.getTableHeader()); w?橌秜k浹  
        tab.addTab("表格演示",pane); 右Hm鳳瘣轡  
        tab.setPreferredSize(new Dimension(500,600)); $h鸓鞡6  
        this.add(tab); h愊GRbE  
        this.setEnabled(true);         皙K?痿  
    } 搀??蕄  
  } k?n嘾蝮O  
  T鼴z?.  
  秼鎕構髼1  
  public static void main(String args[]) 铨N謄鎊2? 
  { 俲.?4t? 
    // 设置主框架属性,此处没有使用,可打开看看效果 I蘱?抏2y  
    //try T碟rX絵7  
    //{ 祱#蓔{鳪?  
    //   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 橫遯[A觻>? 
    //} c?■埡?  
    //catch (Exception e){} 謮J觳鰷+w  
    new SwingTest();                 蝃瞻?DM e  
  } 睓綥Y嗚典? 
}