JAVA進行式
          讓我們把JAVA進行到底!
          posts - 13,comments - 21,trackbacks - 0

                  工具欄ToolBar中可加入如JLabel、JPanel、JButton或JComboBox等很多可視化組件的對象,且默認為FlowLayout布局管理器,有時候因為編程的需要,我們要往里面插入很多個組件,如何顯示出完整的組件列表成了一個問題,而ToolBar的對象放在JScrollPane對象中是顯示不出來的,原因是它和JPanel一樣是沒有邊框的,我的解決辦法是,將要插入到工具欄的對象先放入集合中(如果全是相同類型的對象,放在數組中保存更好),再通過for循環依次加入到ToolBar對象中,在ToolBar外面設置一個按鈕,編寫響應該按鈕的點擊事件,當該按鈕被點擊一次時,通過數組下標(或集合索引)從ToolBar中remove()去掉一個組件,并調用revalidate()方法,讓緊跟其后的組件移上去,添補刪除后留下的空白,并把刪除的那個組件重新用add()方法追加到工具欄尾部,這樣循環刪除和添加,就實現了工具欄的滾動效果,由于工具欄的FlowLayout布局,使它在未設置時只能向一個方向添加組件,故我的這個工具欄的滾動效果是單向的。
                  對于兩向滾動,我考慮在反向滾動前重新設置工具欄的布局管理器,以改變其添加組件的方向,從而達到雙向滾動的效果。具體能否實現,有待進一步編碼檢測。
                  在這里我把單向滾動的源代碼記錄如下:

          /**DiaryEditToolBarPane類構建一個包含一個工具欄和一個控制滾動的按鈕 */

          public class DiaryEditToolBarPane extends JPanel implements ActionListener
          {
           JTextPane jTextPane;
           DiaryEditToolBar diaryEditToolBar;
           JPanel jPanelSouth = new JPanel();
           JButton jButtonUp = new JButton(ConstValue.IMG_UP);
           //JButton jButtonDn = new JButton(ConstValue.IMG_DN);
           
           public DiaryEditToolBarPane(JTextPane jTextPane)
           {
            this.jTextPane = jTextPane;
            diaryEditToolBar = new DiaryEditToolBar(this.jTextPane);
            
            jButtonUp.setMargin(new Insets(0,0,0,0));
            //jButtonDn.setMargin(new Insets(0,0,0,0));
            jButtonUp.setActionCommand("up");
            //jButtonDn.setActionCommand("down");
            //jPanelSouth.setLayout(new GridLayout(2,1));
            jPanelSouth.add(jButtonUp);
            //jPanelSouth.add(jButtonDn);
            
            this.setLayout(new BorderLayout());
            this.add(diaryEditToolBar,BorderLayout.CENTER);
            this.add(jPanelSouth, BorderLayout.SOUTH);
            
            jButtonUp.addActionListener(this);
            //jButtonDn.addActionListener(this);
           }
            
           public void setTextPane(JTextPane jTextPane)
           {
            this.jTextPane = jTextPane;
            diaryEditToolBar.setTextPane(this.jTextPane);
           }

           public void actionPerformed(ActionEvent e)
           {
            if(e.getActionCommand().equals("up"))
            {
             diaryEditToolBar.moveUp();
            }
            /*
            else if(e.getActionCommand().equals("down"))
            {
             diaryEditToolBar.moveDown(); 
            }*/
           }
          }

          /**定義一個具體實現工具欄組件布局與滾動的類DiaryEditToolBar  */

          public class DiaryEditToolBar extends JToolBar
          {
           /**用于保存工具按鈕的對象數組*/
           private BrimlessButton[] toolBarButton;
           /**工具按鈕增、刪索引值*/
           private static int index = 0;
           
            
           private void init()
           {
            this.setFloatable(false);
            BrimlessButton[] temp =
            {
             toolBarButtonSave,toolBarButtonSave,toolBarButtonCut,
             toolBarButtonCopy,toolBarButtonPaste,toolBarButtonFontStyle,
             toolBarButtonFontSize,toolBarButtonFontForeground,toolBarButtonBackground,
             toolBarButtonBold,toolBarButtonItalic,toolBarButtonUnderline,
             toolBarButtonFlusLeft,toolBarButtonCenter,toolBarButtonFlushRight,
             toolBarButtonUndo,toolBarButtonRedo,toolBarButtonIndentLeft,
             toolBarButtonIndentRight,toolBarButtonURL,toolBarButtonImage,
             toolBarButtonDateTime
            };
            toolBarButton = temp;
            
            for(int i=0; i<22; i++)
            {
             this.addElement(toolBarButton[i]);
            }

           }

           private void addElement(JButton jButton)
           {
            this.add(jButton);
           }
           
           private void delElement(JButton jButton)
           { 
            this.remove(jButton);
           }
           
           /**刪除工具欄開頭的工具按鈕,并將其添加到工具欄末尾,以實現工具欄向上滾動的效果*/
           public void moveUp()
           {
            delElement(toolBarButton[index]);
            this.revalidate();
            addElement(toolBarButton[index]);
            index = (++index)%22;
           }
           
           /**增加工具欄開頭的工具按鈕,以實現工具欄向下滾動的效果*/
           public void moveDown()
           {
            //addElement(toolBarButton[index]);
            //this.revalidate();
            //repaint();
           } 
          }

          posted on 2005-11-29 23:18 水秀清靈 閱讀(1193) 評論(0)  編輯  收藏 所屬分類: 學習筆記
          主站蜘蛛池模板: 曲周县| 萨迦县| 深泽县| 甘南县| 大洼县| 叙永县| 石家庄市| 韶山市| 富民县| 理塘县| 西贡区| 柯坪县| 大同县| 元氏县| 定边县| 南雄市| 偃师市| 南平市| 公主岭市| 乌海市| 嵩明县| 保康县| 红桥区| 云龙县| 上高县| 永胜县| 哈尔滨市| 伊宁县| 友谊县| 马山县| 青海省| 彭泽县| 桂东县| 乡城县| 乐亭县| 交城县| 满洲里市| 洮南市| 赤峰市| 南京市| 大石桥市|