精品欧美一区二区三区在线观看 _久久久久国色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)

播金莲一级淫片aaaaaaa| 久久综合九色综合网站| 国产性生活大片| 一区二区精彩视频| 亚洲图片有声小说| 久久综合色一本| 国产精品久久777777换脸| 欧美特黄视频| 亚洲精品一区二区网址| 成人综合久久网| 波多野结依一区| 久久久久久久久99精品| 成人久久18免费网站图片| 国产精品成人国产乱| 狠狠色丁香婷婷综合影院| 8x福利精品第一导航| 18禁网站免费无遮挡无码中文| 国产在线视频网| 国产乱子伦一区二区三区国色天香| 午夜精品久久久久久久99热浪潮 | 久久伦理网站| 国产又粗又大又爽| 久久精品午夜| 久久影院免费观看| 手机看片福利视频| 国产91精品入| 91精品国产综合久久精品app| 免费日韩视频在线观看| 亚洲大胆人体大胆做受1| 国产日产欧美一区二区三区| 国产欧美日韩一区| 99久久免费国产精精品| 人妖欧美一区二区| 97视频免费观看| 免费看一级一片| 色欧美自拍视频| 亚洲精品久久久久中文字幕欢迎你| 五月婷婷六月丁香激情| 男人av在线播放| 亚洲一区二区三区在线播放| 手机看片日韩国产| 自拍视频在线免费观看| 久久婷婷国产综合精品青草| 国产精品久久久久av福利动漫| 国产精品久久久久久久免费看| 久久久久在线| 日本老师69xxx| 日产精品久久久久| 影音先锋国产精品| 欧美激情综合亚洲一二区| xxxx日本少妇| 婷婷综合网站| 日韩在线小视频| 男女男精品视频网站| 欧美日韩国产高清电影| 亚洲欧美另类国产| 污污污www精品国产网站| 日韩在线亚洲| 日韩一区二区三区在线视频| 中文字幕一区二区三区四| 狠狠久久伊人中文字幕| 欧美亚洲丝袜传媒另类| 我看黄色一级片| 久久精品嫩草影院| 欧美日韩久久一区二区| 色婷婷.com| av国产精品| 制服.丝袜.亚洲.中文.综合| 日本美女久久久| 深夜福利一区| 亚洲精品99久久久久| 91黄色免费视频| 欧美日韩123| 在线激情影院一区| 亚洲怡红院在线观看| 欧美一区亚洲| 91精品国产亚洲| 无码视频在线观看| 美女任你摸久久| 亚洲一区二区三区成人在线视频精品| wwwav网站| 91色在线porny| 少妇特黄a一区二区三区| 黄色精品在线观看| 亚洲国产精品一区二区久久恐怖片 | 99久久99久久精品国产片果冰| 色99之美女主播在线视频| 午夜精品一区二区三区视频| 亚洲日本欧美| 国产精品久久久久aaaa九色| 99视频免费看| av中文字幕一区| 亚洲v国产v在线观看| 污视频免费在线观看| 疯狂做受xxxx欧美肥白少妇| 日日躁夜夜躁aaaabbbb| 91午夜精品| 亚洲视频综合网| 欧美成人国产精品高潮| 亚洲影视综合| 91午夜在线播放| 欧美男男同志| 一区二区三区四区在线免费观看| 欧美二区在线视频| 青青久久精品| 日韩毛片在线观看| 加勒比婷婷色综合久久| 性高湖久久久久久久久| 91久久精品国产| 欧美女v视频| 亚洲精品免费在线观看| 黄色片网址在线观看| 午夜不卡一区| 亚洲欧美国产一区二区三区| 永久看片925tv| 日韩中文字幕亚洲一区二区va在线| 92看片淫黄大片欧美看国产片| 色av男人的天堂免费在线| 亚洲日本电影在线| 人人爽人人av| 西野翔中文久久精品字幕| 久久亚洲精品一区二区| 日韩欧美国产另类| bt7086福利一区国产| 亚洲精品偷拍视频| 欧美aaa视频| 精品在线小视频| 五月天婷婷丁香| 国产一区二区三区久久久 | 91porn在线| 欧美激情电影| 国产精品1234| 欧美日韩在线精品一区二区三区激情综 | 欧美人妻一区二区| 美女脱光内衣内裤视频久久影院| 欧美日韩一区二区三| 国产ktv在线视频| 精品少妇一区二区三区日产乱码 | 蜜桃免费在线| 精品久久久久久亚洲国产300 | 视频免费一区二区| 久久精品国产精品| 亚洲无码久久久久| 国产精品欧美经典| 免费看涩涩视频| 日韩伦理一区| 国产欧美精品久久久| 国产黄在线看| 欧美制服丝袜第一页| 免费在线观看污| 久久久久99| 欧美美乳视频网站在线观看| 亚洲涩涩在线| 亚洲男人天堂网| 区一区二在线观看| 久久精品亚洲精品国产欧美| 日韩中文字幕二区| av亚洲免费| 国产伦精品免费视频| av影片在线看| 91精品国产综合久久久久久久久久 | 不卡的在线视频| 我不卡神马影院| 97免费资源站| 97人人在线视频| 亚洲奶大毛多的老太婆| 国产成人精品亚洲| 中文字幕中文字幕一区二区 | caoporen国产精品视频| 欧洲黄色一级视频| 国产精品亚洲人成在99www| 国产精品999| 欧美激情视频在线播放| 日韩一区二区三区观看| 国产在线精品观看| 久久久九九九九| 一区二区三区欧美精品| 午夜精品久久| 蜜桃麻豆www久久国产精品| 欧美大片免费观看网址| www亚洲精品| 人妻精品一区二区三区| 色哟哟欧美精品| 国产精品69久久久久孕妇欧美| 国产美女主播视频一区| 很污的网站在线观看| 九热爱视频精品视频| 国产欧美久久久久久| 国产精品一区hongkong| 亚洲视频在线观看免费| 成人黄色免费视频| 色综合久久中文综合久久97| 国产真实乱在线更新| 成人免费精品视频| 91视频免费版污| 欧美精品观看| 日韩福利在线| 操欧美女人视频| 国产精品国产福利国产秒拍| 羞羞的视频在线看| 亚洲欧洲日产国码av系列天堂| 国产欧美日韩综合精品一区二区三区| 亚洲va韩国va欧美va精品| 中文字幕av久久爽一区| 成人永久aaa| 久久撸在线视频| 999在线观看精品免费不卡网站| 日产国产精品精品a∨| 99re8这里有精品热视频8在线| 国产精品高清在线| heyzo中文字幕在线| 色噜噜国产精品视频一区二区| 天天操天天射天天舔| 欧美日韩一区在线| 久久狠狠高潮亚洲精品| 亚洲乱码中文字幕| 亚洲综合欧美综合| 不卡av在线免费观看| 韩国一区二区在线播放| 日日欢夜夜爽一区| 九九九九免费视频| 在线日韩欧美| 400部精品国偷自产在线观看| 国产一区二区精品福利地址| 国产亚洲二区| 日韩中文字幕在线一区| 国产在线观看一区二区三区| 一区二区三区短视频| 久久噜噜噜精品国产亚洲综合| 哥也色在线视频| 日韩中文字幕在线| 国产高清视频免费最新在线| 精品一区二区三区电影| 老熟妇高潮一区二区高清视频| 欧美一区二区在线播放| 伊人久久成人网| 在线一区二区三区做爰视频网站| 91av在线免费视频| 五月天中文字幕一区二区| 中文字幕影音先锋| 亚洲欧美日韩小说| 91狠狠综合久久久| 国产精品久99| 日韩一卡二卡在线观看| 欧美国产日韩一二三区| 亚洲色成人网站www永久四虎| 26uuu久久综合| 亚洲av无码国产精品久久| 91女人视频在线观看| 亚洲乱码国产乱码精品精大量| 91亚洲精品久久久蜜桃| 黄色录像a级片| 91在线视频免费观看| 成人网站免费观看| 久久精品人人做| 丁香激情五月少妇| 国产精品嫩草99a| 男女全黄做爰文章| 亚洲免费观看高清完整版在线观看熊| 老湿机69福利| 亚洲一区在线播放| 日本午夜小视频| 色综合中文字幕国产| 国产美女www爽爽爽| 69久久99精品久久久久婷婷| 中文字幕a级片| 7799精品视频| 亚洲国产精品无码久久| 亚洲电影免费观看高清完整版在线观看 | 久久夜精品香蕉| 在线免费观看污| 97国产精品人人爽人人做| 涩涩网在线视频| 国产精品久久久久一区二区| 亚洲精品第一| 国产精品免费在线| 免费观看不卡av| 伊人色综合久久天天五月婷| 欧美二区视频| 黄色大片在线免费看| 日本午夜精品一区二区三区电影| www.成年人| av网站一区二区三区| 亚洲v国产v欧美v久久久久久| 国产精品夫妻自拍| 国产一级片网址| 在线观看亚洲一区| 精品人妻伦一二三区久久| 日韩黄色高清视频| 日韩精品黄色| 国内自拍欧美激情| jizz久久久久久| 超碰97人人在线| 精品国产日韩欧美| 黄色网在线视频| 老司机精品导航| 色欲欲www成人网站| 国产日韩欧美a| 久草视频手机在线观看| 在线区一区二视频| 欧美一级特黄aaaaaa大片在线观看 | 免费黄视频在线观看| 久久精品免费在线观看| 久久久久人妻一区精品色欧美| 色偷偷久久一区二区三区| a级片免费视频| 亚洲无线码在线一区观看| 久久五月精品中文字幕| 国产精品露脸自拍| 欧美亚洲色图校园春色| 一本二本三本亚洲码| 老色鬼久久亚洲一区二区| 四虎精品一区二区| 中文字幕亚洲区| 欧美brazzers| 亚洲黄一区二区| 黄页在线观看免费| 国产精品网站大全| 国产a久久精品一区二区三区| 2022中文字幕| 久久成人18免费观看| 91视频在线网站| 天天影视涩香欲综合网| 国产激情视频在线播放| 中文在线资源观看视频网站免费不卡 | 国产精品乱码人人做人人爱| 国产精品久久久久久久久久精爆| 欧美成人伊人久久综合网| 2021av在线| 国产精品黄色av| 久久综合影院| 国产乱子夫妻xx黑人xyx真爽| 成人深夜视频在线观看| 超碰在线国产97| 91精品国产综合久久久久| 巨大荫蒂视频欧美另类大| 国产精品亚洲自拍| 欧美日韩水蜜桃| 激情视频综合网| 久久综合久久鬼色| 国产精品美女久久久久av爽| 精品国产一区二区三区不卡| 伊人在我在线看导航| 亚洲bt天天射| 女人色偷偷aa久久天堂| 成人免费黄色av| 亚洲欧美经典视频| 国产999久久久| 欧美老少配视频| 亚洲精品在线国产| 国产天堂视频在线观看| 国产成人免费视频一区| 久一视频在线观看| 亚洲成人精品视频| 九九色在线视频| 国产三级精品在线不卡| 一区二区国产在线观看| 在线观看日韩精品视频| 欧美性猛交xxxx乱大交3| 男人天堂网在线| 国产精品白嫩美女在线观看| 狠狠做六月爱婷婷综合aⅴ| 中文字幕第36页| 中文字幕一区二区三区视频| 精品国产免费无码久久久| 欧美激情免费在线| 丁香婷婷成人| 狠狠爱免费视频| 国产精品久久久久婷婷| 国产免费叼嘿网站免费| 久久久久久国产精品久久| 青青操综合网| 欧美黄色性生活| 一区二区三区四区高清精品免费观看| 成人久久精品人妻一区二区三区| 午夜精品一区二区三区视频免费看| 九热爱视频精品视频| 男女污污视频网站| 亚洲不卡av一区二区三区| porn视频在线观看| 91免费看蜜桃| 六月天综合网| 99自拍视频在线| 日韩久久免费电影| 亚洲在线资源| 黄色www网站| 国产精品狼人久久影院观看方式| 亚洲精品无码久久久| 日本久久久久久| 国产精品porn| 中文字幕成人动漫| 欧美一区二区福利在线| 中文字幕在线看片| eeuss中文| 久久女同精品一区二区| 一级特黄色大片| 庆余年2免费日韩剧观看大牛| 亚洲国产成人精品女人| 99久久免费看精品国产一区| 欧美另类videos死尸|