精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java Swing編程:特殊容器

開發(fā) 后端
Swing還提供我們?cè)S多特殊容器方便我們編程,JSplitPane(分割面板),JTabbedPane(多選項(xiàng)卡),JLayeredPane(層容器,允許組件互相重疊),最后講兩個(gè)復(fù)雜的容器JDesktopPane和JInternalFrame這些多是為了實(shí)現(xiàn)MDI(多文檔界面)。

Swing還提供我們?cè)S多特殊容器方便我們編程,JSplitPane(分割面板),JTabbedPane(多選項(xiàng)卡),JLayeredPane(層容器,允許組件互相重疊),***講兩個(gè)復(fù)雜的容器JDesktopPane和JInternalFrame這些多是為了實(shí)現(xiàn)MDI(多文檔界面),這些容器不是三言兩語能說清楚的,所以我將以舉例的方式(其中多是書中的例子,舉的都不錯(cuò),自己一個(gè)一個(gè)寫可吃不消),如還有不懂的,請(qǐng)多查閱API文檔。

eg:JSplitPane(分割面板)

  1. public class TestSplitPane  
  2. {  
  3.     Book[] books = new Book[]{  
  4.         new Book("Struts2權(quán)威指南" , new ImageIcon("ico/struts2.jpg") ,   
  5.             "全面介紹Struts2的各方/n面知識(shí)"),  
  6.         new Book("輕量級(jí)J2EE企業(yè)應(yīng)用實(shí)戰(zhàn)" , new ImageIcon("ico/j2ee.jpg") ,  
  7.             "介紹Struts、Spring和/nHibernate整合開發(fā)的知識(shí)"),  
  8.         new Book("基于J2EE的Ajax寶典" , new ImageIcon("ico/ajax.jpg") ,   
  9.             "全面介紹J2EE平臺(tái)上Ajax/n開發(fā)的各方面知識(shí)")  
  10.     };  
  11.     JFrame jf = new JFrame("測(cè)試JSplitPane");  
  12.     JList bookList = new JList(books);  
  13.     JLabel bookCover = new JLabel();  
  14.     JTextArea bookDesc = new JTextArea();  
  15.  
  16.     public void init()  
  17.     {  
  18.         //為三個(gè)組件設(shè)置***大小  
  19.         bookList.setPreferredSize(new Dimension(150300));  
  20.         bookCover.setPreferredSize(new Dimension(300150));  
  21.         bookDesc.setPreferredSize(new Dimension(300150));  
  22.         //為下拉列表添加事件監(jiān)聽器  
  23.         bookList.addListSelectionListener(new ListSelectionListener()  
  24.         {  
  25.             public void valueChanged(ListSelectionEvent event)  
  26.             {    
  27.                 Book book = (Book)bookList.getSelectedValue();  
  28.                 bookCover.setIcon(book.getIco());  
  29.                 bookDesc.setText(book.getDesc());  
  30.             }  
  31.          });  
  32.         //創(chuàng)建一個(gè)垂直的分割面板,  
  33.         //將bookCover放在上面,將bookDesc放在下面 , 支持連續(xù)布局  
  34.         JSplitPane left = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true ,   
  35.             bookCover, new JScrollPane(bookDesc));  
  36.         //打開“一觸即展”的特性  
  37.         left.setOneTouchExpandable(true);  
  38.         //下面代碼設(shè)置分割條的大小。  
  39.         //left.setDividerSize(50);   
  40.         //設(shè)置該分割面板根據(jù)所包含組件的***大小來調(diào)整布局   
  41.         left.resetToPreferredSizes();  
  42.         //創(chuàng)建一個(gè)水平的分割面板  
  43.         //將left組件放在左邊,將bookList組件放在右邊  
  44.         JSplitPane content = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,  
  45.             left, bookList);  
  46.         jf.add(content);  
  47.         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  48.         jf.pack();  
  49.         jf.setVisible(true);  
  50.     }  
  51.     public static void main(String[] args)  
  52.     {    
  53.         new TestSplitPane().init();  
  54.     }  
  55. }  
  56. class Book  
  57. {   
  58.     private String name;  
  59.     private Icon ico;  
  60.     private String desc;  
  61.  
  62.     public Book(){}  
  63.  
  64.     public Book(String name , Icon ico , String desc)  
  65.     {  
  66.         this.name = name;  
  67.         this.ico = ico;  
  68.         this.desc = desc;  
  69.     }  
  70.  
  71.     public void setName(String name)  
  72.     {  
  73.         this.name = name;  
  74.     }  
  75.     public String getName()  
  76.     {  
  77.          return this.name;  
  78.     }  
  79.  
  80.     public void setIco(Icon ico)  
  81.     {  
  82.         this.ico = ico;  
  83.     }  
  84.     public Icon getIco()  
  85.     {  
  86.          return this.ico;  
  87.     }  
  88.  
  89.     public void setDesc(String desc)  
  90.     {  
  91.         this.desc = desc;  
  92.     }  
  93.     public String getDesc()  
  94.     {  
  95.          return this.desc;  
  96.     }  
  97.     public String toString()  
  98.     {  
  99.         return name;  
  100.     }  

eg:JTabbedPane(多選項(xiàng)卡)

  1. public class TestJTabbedPane  
  2. {  
  3.     JFrame jf = new JFrame("測(cè)試Tab頁面");  
  4.     //創(chuàng)建一個(gè)Tab頁面的標(biāo)簽放在左邊,采用換行布局策略的JTabbedPane  
  5.     JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.LEFT , JTabbedPane.WRAP_TAB_LAYOUT);     
  6.     ImageIcon icon = new ImageIcon("ico/close.gif");  
  7.     String[] layouts = {"換行布局" , "滾動(dòng)條布局"};  
  8.     String[] positions = {"左邊" , "頂部" , "右邊" , "底部"};  
  9.     Map<String , String> books = new LinkedHashMap<String , String>();  
  10.  
  11.     public void init()  
  12.     {  
  13.         books.put("ROR敏捷開發(fā)***實(shí)踐" , "ror.jpg");  
  14.         books.put("Struts2權(quán)威指南" , "struts2.jpg");  
  15.         books.put("基于J2EE的Ajax寶典" , "ajax.jpg");  
  16.         books.put("輕量級(jí)J2EE企業(yè)應(yīng)用實(shí)戰(zhàn)" , "j2ee.jpg");  
  17.         books.put("Spring2.0寶典" , "spring.jpg");  
  18.         String tip = "可看到本書的封面照片";  
  19.         //向JTabbedPane中添加5個(gè)Tab頁面,指定了標(biāo)題、圖標(biāo)和提示,但該Tab頁面的組件為null  
  20.         for (String bookName : books.keySet())  
  21.         {  
  22.             tabbedPane.addTab(bookName, icon, null , tip);  
  23.         }  
  24.         jf.add(tabbedPane, BorderLayout.CENTER);  
  25.         //為JTabbedPane添加事件監(jiān)聽器  
  26.         tabbedPane.addChangeListener(new ChangeListener()  
  27.         {  
  28.             public void stateChanged(ChangeEvent event)  
  29.             {         
  30.                 //如果被選擇的組件依然是空  
  31.                 if (tabbedPane.getSelectedComponent() == null)  
  32.                 {  
  33.                     //獲取所選Tab頁  
  34.                     int n = tabbedPane.getSelectedIndex();  
  35.                     //為指定標(biāo)前頁加載內(nèi)容  
  36.                     loadTab(n);  
  37.                 }  
  38.             }  
  39.         });  
  40.         //系統(tǒng)默認(rèn)選擇***頁,加載***頁內(nèi)容  
  41.         loadTab(0);  
  42.         tabbedPane.setPreferredSize(new Dimension(500 , 300));  
  43.         //增加控制標(biāo)簽布局、標(biāo)簽位置的單選按鈕  
  44.         JPanel buttonPanel = new JPanel();  
  45.         ChangeAction action = new ChangeAction();  
  46.         buttonPanel.add(new ButtonPanel(action , "選擇標(biāo)簽布局策略" ,layouts));  
  47.         buttonPanel.add (new ButtonPanel(action , "選擇標(biāo)簽位置" ,positions));  
  48.         jf.add(buttonPanel, BorderLayout.SOUTH);  
  49.         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  50.         jf.pack();  
  51.         jf.setVisible(true);  
  52.  
  53.     }  
  54.     //為指定標(biāo)簽頁加載內(nèi)容  
  55.     private void loadTab(int n)  
  56.     {  
  57.         String title = tabbedPane.getTitleAt(n);  
  58.         //根據(jù)標(biāo)簽頁的標(biāo)題獲取對(duì)應(yīng)圖書封面  
  59.         ImageIcon bookImage = new ImageIcon("ico/" + books.get(title));  
  60.         tabbedPane.setComponentAt(n, new JLabel(bookImage));  
  61.         //改變標(biāo)簽頁的圖標(biāo)  
  62.         tabbedPane.setIconAt(n, new ImageIcon("ico/open.gif"));  
  63.     }  
  64.     //定義改變標(biāo)簽頁的布局策略,放置位置的監(jiān)聽器  
  65.     class ChangeAction implements ActionListener  
  66.     {  
  67.         public void actionPerformed(ActionEvent event)  
  68.         {  
  69.             JRadioButton source = (JRadioButton)event.getSource();  
  70.             String selection = source.getActionCommand();  
  71.             if (selection.equals(layouts[0]))  
  72.             {  
  73.                 tabbedPane.setTabLayoutPolicy(JTabbedPane.WRAP_TAB_LAYOUT);  
  74.             }  
  75.             else if (selection.equals(layouts[1]))  
  76.             {  
  77.                 tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);  
  78.             }  
  79.             else if (selection.equals(positions[0]))  
  80.             {  
  81.                 tabbedPane.setTabPlacement(JTabbedPane.LEFT);  
  82.             }  
  83.             else if (selection.equals(positions[1]))  
  84.             {  
  85.                 tabbedPane.setTabPlacement(JTabbedPane.TOP);  
  86.             }  
  87.             else if (selection.equals(positions[2]))  
  88.             {  
  89.                 tabbedPane.setTabPlacement(JTabbedPane.RIGHT);  
  90.             }  
  91.             else if (selection.equals(positions[3]))  
  92.             {  
  93.                 tabbedPane.setTabPlacement(JTabbedPane.BOTTOM);  
  94.             }  
  95.         }  
  96.     }  
  97.  
  98.     public static void main(String[] args)  
  99.     {    
  100.         new TestJTabbedPane().init();  
  101.     }  
  102. }  
  103.  
  104. //定義一個(gè)JPanel類擴(kuò)展類,該類的對(duì)象包含多個(gè)縱向排列的JRadioButton控件  
  105. //且Panel擴(kuò)展類可以指定一個(gè)字符串作為TitledBorder  
  106. class ButtonPanel extends JPanel  
  107. {    
  108.     private ButtonGroup group;  
  109.     public ButtonPanel(TestJTabbedPane.ChangeAction action , String title, String[] labels)  
  110.     {    
  111.         setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), title));  
  112.         setLayout(new BoxLayout(this, BoxLayout.X_AXIS));  
  113.         group = new ButtonGroup();  
  114.         for (int i = 0; labels!= null && i < labels.length; i++)  
  115.         {    
  116.             JRadioButton b = new JRadioButton(labels[i]);  
  117.             b.setActionCommand(labels[i]);  
  118.             add(b);  
  119.             //添加事件監(jiān)聽器  
  120.             b.addActionListener(action);  
  121.             group.add(b);  
  122.             b.setSelected(i == 0);  
  123.         }  
  124.     }  

eg:JLayeredPane(層容器,允許組件互相重疊)

  1. public class TestJLayeredPane  
  2. {  
  3.     JFrame jf = new JFrame("測(cè)試JLayeredPane");  
  4.     JLayeredPane layeredPane = new JLayeredPane();  
  5.     public void init()  
  6.     {  
  7.         //向layeredPane中添加3個(gè)組件  
  8.         layeredPane.add(new ContentPanel(10 , 20 , "Struts2權(quán)威指南" ,   
  9.             "ico/struts2.jpg"), JLayeredPane.MODAL_LAYER);  
  10.         layeredPane.add(new ContentPanel(100 , 60 , "RoR敏捷開發(fā)***實(shí)踐",   
  11.             "ico/ror.jpg"), JLayeredPane.DEFAULT_LAYER);  
  12.         layeredPane.add(new ContentPanel(190 , 100 , "輕量級(jí)J2EE企業(yè)應(yīng)用實(shí)戰(zhàn)",   
  13.             "ico/j2ee.jpg"), 4);  
  14.         layeredPane.setPreferredSize(new Dimension(400300));  
  15.         layeredPane.setVisible(true);  
  16.         jf.add(layeredPane);  
  17.         jf.pack();  
  18.         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  19.         jf.setVisible(true);  
  20.     }  
  21.     public static void main(String[] args)   
  22.     {  
  23.         new TestJLayeredPane().init();  
  24.     }  
  25. }  
  26. //擴(kuò)展了JPanel類,可以直接創(chuàng)建一個(gè)放在指定位置,  
  27. //且有指定標(biāo)題、放置指定圖標(biāo)的JPanel對(duì)象  
  28. class ContentPanel extends JPanel  
  29. {  
  30.     public ContentPanel(int xPos , int yPos , String title , String ico)  
  31.     {  
  32.         setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), title));  
  33.         JLabel label = new JLabel(new ImageIcon(ico));  
  34.         add(label);  
  35.         setBounds(xPos , yPos , 160200);  
  36.     }  

以上3例子由于都是廣告,我就不貼給大家了,沒圖片不影響程序的效果。

***是JDesktopPane和JInternalFrame來實(shí)現(xiàn)MDI

  1. public class TestInternalFrame  
  2. {  
  3.     final int DESKTOP_WIDTH = 480;  
  4.     final int DESKTOP_HEIGHT = 360;  
  5.     final int FRAME_DISTANCE = 30;  
  6.  
  7.     JFrame jf = new JFrame("MDI界面");  
  8.     //定義一個(gè)虛擬桌面  
  9.     private MyJDesktopPane desktop = new MyJDesktopPane();  
  10.     //保存下一個(gè)內(nèi)部窗口的座標(biāo)點(diǎn)  
  11.     private int nextFrameX;  
  12.     private int nextFrameY;  
  13.     //定義內(nèi)部窗口為虛擬桌面的1/2大小  
  14.     private int width = DESKTOP_WIDTH / 2;  
  15.     private int height = DESKTOP_HEIGHT / 2;  
  16.     //為主窗口定義2個(gè)菜單  
  17.     JMenu fileMenu = new JMenu("文件");  
  18.     JMenu windowMenu = new JMenu("窗口");  
  19.     //定義newAction用于創(chuàng)建菜單和工具按鈕  
  20.     Action newAction = new AbstractAction("新建"new ImageIcon("ico/new.png"))  
  21.     {  
  22.         public void actionPerformed(ActionEvent event)  
  23.         {  
  24.             //創(chuàng)建內(nèi)部窗口  
  25.             final JInternalFrame iframe = new JInternalFrame("新文檔",  
  26.                 true// 可改變大小  
  27.                 true// 可關(guān)閉  
  28.                 true// 可***化  
  29.                 true); // 可最小化  
  30.             iframe.add(new JScrollPane(new JTextArea(840)));  
  31.             //將內(nèi)部窗口添加到虛擬桌面中  
  32.             desktop.add(iframe);  
  33.             //設(shè)置內(nèi)部窗口的原始位置(內(nèi)部窗口默認(rèn)大小是0X0,放在0,0位置)  
  34.             iframe.reshape(nextFrameX, nextFrameY, width, height);  
  35.             //使該窗口可見,并嘗試選中它  
  36.             iframe.show();  
  37.             //計(jì)算下一個(gè)內(nèi)部窗口的位置  
  38.             nextFrameX += FRAME_DISTANCE;  
  39.             nextFrameY += FRAME_DISTANCE;  
  40.             if (nextFrameX + width > desktop.getWidth()) nextFrameX = 0;  
  41.             if (nextFrameY + height > desktop.getHeight()) nextFrameY = 0;  
  42.         }  
  43.     };  
  44.     //定義exitAction用于創(chuàng)建菜單和工具按鈕  
  45.     Action exitAction = new AbstractAction("退出"new ImageIcon("ico/exit.png"))  
  46.     {  
  47.         public void actionPerformed(ActionEvent event)  
  48.         {  
  49.             System.exit(0);  
  50.         }  
  51.     };  
  52.  
  53.     public void init()  
  54.     {  
  55.         //為窗口安裝菜單條和工具條  
  56.         JMenuBar menuBar = new JMenuBar();  
  57.         JToolBar toolBar = new JToolBar();  
  58.         jf.setJMenuBar(menuBar);  
  59.         menuBar.add(fileMenu);  
  60.         fileMenu.add(newAction);  
  61.         fileMenu.add(exitAction);  
  62.         toolBar.add(newAction);  
  63.         toolBar.add(exitAction);  
  64.         menuBar.add(windowMenu);  
  65.         JMenuItem nextItem = new JMenuItem("下一個(gè)");  
  66.         nextItem.addActionListener(new ActionListener()  
  67.         {  
  68.             public void actionPerformed(ActionEvent event)  
  69.             {  
  70.                 desktop.selectNextWindow();  
  71.             }  
  72.         });  
  73.         windowMenu.add(nextItem);  
  74.         JMenuItem cascadeItem = new JMenuItem("級(jí)聯(lián)");  
  75.         cascadeItem.addActionListener(new ActionListener()  
  76.         {  
  77.             public void actionPerformed(ActionEvent event)  
  78.             {  
  79.                 //級(jí)聯(lián)顯示窗口,內(nèi)部窗口的大小是外部窗口的0.75  
  80.                 desktop.cascadeWindows(FRAME_DISTANCE , 0.75);  
  81.             }  
  82.         });  
  83.         windowMenu.add(cascadeItem);  
  84.         JMenuItem tileItem = new JMenuItem("平鋪");  
  85.         tileItem.addActionListener(new ActionListener()  
  86.         {  
  87.             public void actionPerformed(ActionEvent event)  
  88.             {  
  89.                 //平鋪顯示所有內(nèi)部窗口  
  90.                 desktop.tileWindows();  
  91.             }  
  92.         });  
  93.         windowMenu.add(tileItem);  
  94.         final JCheckBoxMenuItem dragOutlineItem = new JCheckBoxMenuItem("僅顯示拖動(dòng)窗口的輪廓");  
  95.         dragOutlineItem.addActionListener(new ActionListener()  
  96.         {  
  97.             public void actionPerformed(ActionEvent event)  
  98.             {  
  99.                 //根據(jù)該菜單項(xiàng)是否選擇來決定采用哪種拖動(dòng)模式  
  100.                 desktop.setDragMode(dragOutlineItem.isSelected()   
  101.                     ? JDesktopPane.OUTLINE_DRAG_MODE  
  102.                     : JDesktopPane.LIVE_DRAG_MODE);  
  103.             }  
  104.         });  
  105.         windowMenu.add(dragOutlineItem);  
  106.         desktop.setPreferredSize(new Dimension(480360));  
  107.         //將虛擬桌面添加到***JFrame容器中  
  108.         jf.add(desktop);  
  109.         jf.add(toolBar , BorderLayout.NORTH);  
  110.         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  111.         jf.pack();  
  112.         jf.setVisible(true);  
  113.     }  
  114.  
  115.     public static void main(String[] args)  
  116.     {    
  117.         new TestInternalFrame().init();  
  118.     }  
  119. }  
  120. class MyJDesktopPane extends JDesktopPane  
  121. {  
  122.     //將所有窗口以級(jí)聯(lián)方式顯示,  
  123.     //其中offset是兩個(gè)窗口的位移距離,scale是內(nèi)部窗口與JDesktopPane的大小比例  
  124.     public void cascadeWindows(int offset , double scale)  
  125.     {  
  126.         //定義級(jí)聯(lián)顯示窗口時(shí)內(nèi)部窗口的大小  
  127.         int width = (int)(getWidth() * scale);  
  128.         int height = (int)(getHeight() * scale);  
  129.         //用于保存級(jí)聯(lián)窗口時(shí)每個(gè)窗口的位置  
  130.         int x = 0;  
  131.         int y = 0;  
  132.         for (JInternalFrame frame : getAllFrames())  
  133.         {    
  134.             try 
  135.             {    
  136.                 //取消內(nèi)部窗口的***化,最小化  
  137.                 frame.setMaximum(false);  
  138.                 frame.setIcon(false);  
  139.                 //把窗口重新放置在指定位置  
  140.                 frame.reshape(x, y, width, height);  
  141.                 x += offset;  
  142.                 y += offset;  
  143.                 //如果到了虛擬桌面邊界  
  144.                 if (x + width > getWidth()) x = 0;  
  145.                 if (y + height > getHeight()) y = 0;  
  146.             }  
  147.             catch (PropertyVetoException e)  
  148.             {}  
  149.         }  
  150.     }  
  151.     //將所有窗口以平鋪方式顯示  
  152.     public void tileWindows()  
  153.     {    
  154.         //統(tǒng)計(jì)所有窗口  
  155.         int frameCount = 0;  
  156.         for (JInternalFrame frame : getAllFrames())  
  157.         {  
  158.             frameCount++;  
  159.         }  
  160.         //計(jì)算需要多少行、多少列才可以平鋪所有窗口  
  161.         int rows = (int) Math.sqrt(frameCount);  
  162.         int cols = frameCount / rows;  
  163.         //需要額外增加到其他列中的窗口  
  164.         int extra = frameCount % rows;  
  165.         //計(jì)算平鋪時(shí)內(nèi)部窗口的大小  
  166.         int width = getWidth() / cols;  
  167.         int height = getHeight() / rows;  
  168.         //用于保存平鋪窗口時(shí)每個(gè)窗口在橫向、縱向上的索引  
  169.         int x = 0;  
  170.         int y = 0;  
  171.         for (JInternalFrame frame : getAllFrames())  
  172.         {    
  173.             try 
  174.             {  
  175.                 //取消內(nèi)部窗口的***化,最小化  
  176.                 frame.setMaximum(false);  
  177.                 frame.setIcon(false);  
  178.                 //將窗口放在指定位置  
  179.                 frame.reshape(x * width, y * height, width, height);  
  180.                 y++;  
  181.                 //每排完一列窗口  
  182.                 if (y == rows)  
  183.                 {  
  184.                     //開始排放下一列窗口  
  185.                     y = 0;  
  186.                     x++;  
  187.                     //如果額外多出的窗口與剩下的列數(shù)相等,則后面所有列都需要多排列一個(gè)窗口  
  188.                     if (extra == cols - x)  
  189.                     {  
  190.                         rows++;  
  191.                         height = getHeight() / rows;  
  192.                     }  
  193.                 }  
  194.             }  
  195.             catch (PropertyVetoException e)  
  196.             {}  
  197.         }  
  198.     }  
  199.     //選中下一個(gè)非圖標(biāo)窗口  
  200.     public void selectNextWindow()  
  201.     {    
  202.         JInternalFrame[] frames = getAllFrames();  
  203.         for (int i = 0; i < frames.length; i++)  
  204.         {    
  205.             if (frames[i].isSelected())  
  206.             {    
  207.                 // 找出下一個(gè)非最小化的窗口,嘗試選中它,  
  208.                 //如果選中失敗,則繼續(xù)嘗試選中下一個(gè)窗口  
  209.                 int next = (i + 1) % frames.length;  
  210.                 while (next != i)  
  211.                 {  
  212.                     //如果該窗口不是處于最小化狀態(tài)  
  213.                     if (!frames[next].isIcon())  
  214.                     {  
  215.                         try 
  216.                         {    
  217.                             frames[next].setSelected(true);  
  218.                             frames[next].toFront();  
  219.                             frames[i].toBack();  
  220.                             return;  
  221.                         }  
  222.                         catch (PropertyVetoException e)  
  223.                         {}  
  224.                     }  
  225.                     next = (next + 1) % frames.length;  
  226.                 }  
  227.             }  
  228.         }  
  229.     }  

大家注意看繼承JDesktopPane的類MyJDesktopPane

其中的3個(gè)方法非常有用,這是對(duì)窗口控制的基本方法(級(jí)聯(lián),平鋪,選下個(gè)窗口),大家可以保留下來,以備后用。

原文鏈接:http://blog.csdn.net/terryzero/article/details/3770982

【編輯推薦】

  1. Java Swing編程:基本組件
  2. Java Swing用戶界面設(shè)計(jì):序
  3. 用Swing制作精美的圖層疊加圖
  4. 簡述Java圖形用戶界面設(shè)計(jì)(Swing)
  5. Effective Java 創(chuàng)建和銷毀對(duì)象
責(zé)任編輯:林師授 來源: terryzero的博客
相關(guān)推薦

2012-01-17 14:05:29

JavaSwing

2012-01-17 14:09:54

JavaSwing

2012-01-17 13:46:55

JavaSwing

2012-01-17 13:53:16

JavaSwing

2012-01-17 13:16:34

JavaSwing

2009-07-10 13:36:32

Swing容器

2012-04-24 09:40:42

SwingJava

2012-04-27 15:21:45

JavaSwing

2009-07-10 13:20:37

Swing容器組件

2012-04-28 10:25:11

JavaSwing

2012-01-17 13:58:17

JavaSwing

2012-02-02 09:21:39

編程

2012-01-17 14:01:33

JavaSwing

2009-07-10 14:20:01

AcceleratorJava Swing

2009-07-10 11:45:44

Java Swing

2009-07-16 11:13:50

Java Swing

2009-07-15 15:35:59

Swing程序Swing性能

2023-07-03 09:59:00

并發(fā)編程并發(fā)容器

2009-07-10 10:47:01

Java Swing

2009-07-10 13:09:53

.Net與Java S
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲欧美日韩小说| 秋霞午夜鲁丝一区二区老狼| 亚洲国产精品福利| 亚洲熟妇国产熟妇肥婆| 在线免费观看黄色| 成人午夜精品在线| 国产精品网站视频| 九九热国产视频| 久久影视一区| 亚洲精品电影网| 久热精品在线观看视频| bbw在线视频| 国产精品乱码一区二区三区软件 | 被灌满精子的波多野结衣| 免费a在线观看| 国产成人在线看| 国产精品jizz在线观看麻豆| 久久综合色综合| 成人高清av| 亚洲精品日韩欧美| 亚洲AV成人精品| 国产精品久久久久久吹潮| 午夜视黄欧洲亚洲| 强伦女教师2:伦理在线观看| 男同在线观看| 成人福利电影精品一区二区在线观看 | 精品视频免费在线| 黄色免费观看视频网站| 欧洲精品二区| 亚洲欧美日韩国产一区二区三区| 日韩精品电影网站| 无码国产精品一区二区免费16| 狠狠色丁香久久婷婷综合_中| 日本高清视频精品| 国产精品99无码一区二区| 一区二区国产在线| 日韩在线观看成人| 国产又黄又粗的视频| 免费av一区| 日韩av在线网址| 久久aaaa片一区二区| 996久久国产精品线观看| 欧美性欧美巨大黑白大战| 国产日韩一区二区在线观看| 黄色视屏在线免费观看| 午夜精品福利一区二区三区蜜桃| 日韩在线视频在线| 久久电影网站| 亚洲激情自拍视频| aa国产精品| 欧美性欧美巨大黑白大战| 3d动漫一区二区三区| 国产一线二线在线观看| 艳妇臀荡乳欲伦亚洲一区| 国产性生活免费视频| 婷婷色在线播放| 亚洲午夜私人影院| 男女猛烈激情xx00免费视频| av在线小说| 欧美日韩国产在线看| 99精品人妻少妇一区二区| 天堂网在线最新版www中文网| 亚洲高清免费视频| 玩弄中年熟妇正在播放| 欧美裸体视频| 色偷偷88欧美精品久久久| 香蕉视频禁止18| 国产精品777777在线播放| 日韩视频在线你懂得| 折磨小男生性器羞耻的故事| 久久黄色影视| 亚洲欧洲第一视频| 天天操天天摸天天舔| 亚洲乱码电影| 韩国视频理论视频久久| 亚洲欧美一区二区三区在线观看| 日本v片在线高清不卡在线观看| 国产免费一区二区三区在线能观看 | 国产精品欧美日韩| 91精品国产乱码久久久久| 国产乱对白刺激视频不卡| 国产视频一区二区不卡| 国产精品久久一区二区三区不卡 | 国产精品 欧美 日韩| 亚洲一区二区免费看| 国产精品老牛影院在线观看| 国产精品一区二区人人爽| 成人av免费在线播放| 日韩欧美在线一区二区| av在线免费播放| 亚洲一区二区三区免费| 樱花影视一区二区| 91九色在线观看视频| 丁香婷婷久久| 欧美tickling网站挠脚心| 欧美特级黄色录像| 欧美精品一线| 国产精品久久久久久婷婷天堂 | 麻豆国产91在线播放| 成人自拍视频网站| 国产三级电影在线观看| 一区二区三区欧美激情| 亚洲精品高清无码视频| 99ri日韩精品视频| 日韩一区二区三区国产| 日韩欧美国产亚洲| 韩国一区二区视频| 日韩av电影在线观看| 尤物视频在线看| 欧美性猛交xxxx乱大交退制版| 在线观看免费看片| 日韩电影一区| 热re91久久精品国99热蜜臀| 精品国精品国产自在久不卡| 日本一区二区三区国色天香| 日韩日韩日韩日韩日韩| 国产亚洲久久| 中文字幕亚洲一区二区三区五十路 | 亚洲精品一卡二卡| 国产嫩草在线观看| 香蕉久久夜色精品国产使用方法| 久久精品福利视频| 中文字幕丰满人伦在线| 久久久三级国产网站| 精品少妇人欧美激情在线观看| 国产亚洲精品精品国产亚洲综合| 日韩电影中文字幕av| 国产精彩视频在线| 丰满岳乱妇一区二区三区| 国产高清免费在线| 亚洲mmav| 亚洲性视频网址| 狠狠人妻久久久久久| 99精品欧美一区二区三区小说| 69精品丰满人妻无码视频a片| 欧美videos粗暴| 一区二区三区天堂av| 久久久久久久久久成人| 91亚洲精华国产精华精华液| 草b视频在线观看| 69精品国产久热在线观看| 毛片精品免费在线观看| 国产手机av在线| 亚洲色图.com| 欧美一级小视频| 68国产成人综合久久精品| 成人av在线亚洲| 色欧美激情视频在线| 欧美男人的天堂一二区| 四虎地址8848| 国产美女一区二区| 国产免费内射又粗又爽密桃视频| 亚洲国产aⅴ精品一区二区| 久久99精品久久久久久琪琪| 免费观看国产精品| 欧美性xxxxx极品娇小| 无码国产69精品久久久久同性| 久久久久久久高潮| 水蜜桃亚洲精品| 亚洲黑人在线| 欧美高清在线播放| 午夜成人免费影院| 色呦呦国产精品| 国产大屁股喷水视频在线观看| 国产在线视频不卡二| 久久午夜国产精品| 九九久久九九久久| 澳门久久精品| 欧美亚洲午夜视频在线观看| 青青国产在线| 欧美视频一二三区| 亚洲色婷婷一区二区三区| 国产成人精品免费在线| 日本日本19xxxⅹhd乱影响| 精品国产乱码久久久久久果冻传媒| 国产精品一区电影| 男女视频在线| 国产午夜精品麻豆| 国产精品视频一区二区三区,| 亚洲丝袜制服诱惑| 免费a v网站| 日韩在线卡一卡二| 天堂v在线视频| 激情小说亚洲色图| 国产精品wwwwww| 91精品久久久| 亚洲美女性视频| 国产精品系列视频| 欧美日韩精品中文字幕| 国产亚洲精品精品精品| 成人黄页毛片网站| 一级黄色香蕉视频| 在线欧美视频| 中文一区一区三区免费| 电影一区二区在线观看| 国产伦精品免费视频| 8x8ⅹ拨牐拨牐拨牐在线观看| 亚洲人成电影网站| 国产绳艺sm调教室论坛| 色综合久久久久久久久| 久久久久久久久久网站| 成人18在线| 亚洲精品欧美综合四区| 醉酒壮男gay强迫野外xx| 国产综合色在线视频区| 人妻内射一区二区在线视频 | 中文字幕乱码免费| 蜜臀av免费一区二区三区| 96成人在线视频| 播放一区二区| 91黑丝高跟在线| jizz性欧美10| 少妇精69xxtheporn| 亚洲伦理在线观看| 在线播放欧美女士性生活| 无码人妻丰满熟妇奶水区码| 亚洲国产日韩av| 丰满少妇被猛烈进入一区二区| 久久精品男人天堂av| 麻豆精品国产传媒av| 国产福利精品一区二区| 久热精品在线观看视频| 丝瓜av网站精品一区二区 | 91ts人妖另类精品系列| 91蜜桃传媒精品久久久一区二区| 精品人妻人人做人人爽夜夜爽| 久久99国产精品免费网站| 精品www久久久久奶水| 99国产精品私拍| 精品一二三四五区| 中文字幕一区二区三三| 国产三级中文字幕| 亚洲二区三区不卡| 一级一片免费播放| 91欧美大片| 一区国产精品| 久久亚洲专区| 亚洲永久激情精品| 日韩av大片| 亚洲欧美日韩国产yyy| 欧美精品乱码| 日韩精品久久久| 大片网站久久| 亚洲一二三区在线| 色999国产精品| 在线免费观看成人网| 日本一区二区三区视频| 一区二区三区在线视频111| 99久久www免费| 一区二区三区四区久久| 亚洲精品久久久| 亚洲精品少妇一区二区| 精品99视频| 国产亚洲综合视频| 日韩中文欧美在线| 狠狠操狠狠干视频| 国产乱码精品一区二区三区忘忧草| 99中文字幕在线| 国产成人综合视频| 日韩无码精品一区二区| 久久亚洲私人国产精品va媚药| 国产av自拍一区| 国产精品女主播在线观看| www深夜成人a√在线| 亚洲综合成人网| av黄色在线播放| 欧美三级韩国三级日本一级| 91女人18毛片水多国产| 日韩欧美中文字幕制服| 亚州视频一区二区三区| 亚洲欧美一区二区三区久久| 97在线观看免费观看高清| www.精品av.com| 福利写真视频网站在线| 日av在线播放中文不卡| 在线免费观看亚洲| 国产精品一区二区三区不卡| 要久久爱电视剧全集完整观看| 亚洲人一区二区| 国内精品久久久久国产盗摄免费观看完整版 | 你懂的亚洲视频| 999在线观看视频| 日本视频一区二区| 男生和女生一起差差差视频| 99免费精品在线观看| 国产又粗又硬视频| 亚洲一区二区美女| 日韩不卡高清视频| 日韩欧美精品在线视频| 欧美婷婷久久五月精品三区| 日韩在线观看免费高清| 波多野一区二区| 国产精品永久免费在线| 超碰成人免费| 亚洲日本japanese丝袜| 国产欧美精品久久| 五月天激情播播| 91麻豆免费视频| 中文字幕亚洲欧美日韩| 日本韩国欧美一区| 亚洲av无码一区二区三区dv| 亚洲一区第一页| av资源新版天堂在线| 成人h片在线播放免费网站| 日韩成人午夜| 日本一道在线观看| 免费在线观看不卡| 亚洲一区二区在线免费| 亚洲欧美在线视频观看| 中文字幕在线播| 精品国产乱子伦一区| 蜜桃av在线免费观看| 日韩免费在线视频| 丁香五月缴情综合网| 在线精品亚洲一区二区| 久久亚洲风情| 亚洲av成人片色在线观看高潮| 亚洲免费高清视频在线| 最近中文字幕av| 亚洲美女激情视频| 黄视频免费在线看| 国产一区二区黄色| 黄色另类av| 中文字幕av一区二区三区人妻少妇| 国产精品天美传媒| 无码人妻丰满熟妇区bbbbxxxx | 91九色国产视频| 欧美伦理影院| 老头吃奶性行交视频| 91视视频在线观看入口直接观看www| 麻豆疯狂做受xxxx高潮视频| 91麻豆精品国产自产在线观看一区| 成人网视频在线观看| 国产成人精品午夜| 免费欧美一区| 黄色a级片免费| 26uuu成人网一区二区三区| 日本道在线观看| 日韩高清不卡av| 美女露胸视频在线观看| 国产原创精品| 亚洲免费成人| 欧美双性人妖o0| 午夜国产精品一区| 亚洲欧洲视频在线观看| 欧美在线视频一二三| 亚洲系列另类av| 欧美激情精品久久久久久小说| 久久精品日韩一区二区三区| 激情网站在线观看| 一本色道久久综合亚洲精品小说 | 欧美日本国产视频| 日本在线观看视频| 91香蕉亚洲精品| 欧美精品大片| 白嫩情侣偷拍呻吟刺激| 天天综合日日夜夜精品| 九色视频在线播放| 国产精品第3页| 日韩中字在线| 国产探花在线观看视频| 一区二区三区国产精品| 日本成人动漫在线观看| 欧美在线观看网址综合| 一道本一区二区三区| 91av俱乐部| 中文字幕中文字幕在线一区 | 日韩毛片在线观看| 桃色一区二区| 中文字幕色一区二区| 国产不卡视频一区二区三区| 日韩黄色a级片| 亚洲一区www| 精品国模一区二区三区欧美 | 蜜桃av一区二区| 福利所第一导航| 国产视频久久网| 欧美一区=区三区| 欧美精品卡一卡二| 欧美激情一区在线| 性一交一乱一精一晶| 欧洲亚洲在线视频| 欧美.日韩.国产.一区.二区| 深爱五月激情网| 7777精品久久久大香线蕉| 爱看av在线入口| 午夜精品一区二区在线观看| 国产99久久久国产精品潘金网站| 6080午夜伦理| 久久国产精品久久久久久久久久| 日韩a级大片| 色姑娘综合天天| 色综合婷婷久久| 在线三级电影| 日韩久久久久久久久久久久久| 国产成人精品影视| 看黄色一级大片| 久久免费国产视频| 外国成人免费视频| ass精品国模裸体欣赏pics|