swing storm

          java桌面應(yīng)用

          導(dǎo)航

          <2007年3月>
          25262728123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統(tǒng)計(jì)

          常用鏈接

          留言簿(15)

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          swing components-windows ScrollPane

          windows的scrollPane與table頭持平,這個(gè)功能以前我一直都不直到怎么實(shí)現(xiàn),最近茅舍頓開(kāi),時(shí)間不充裕,做的還不完善,有興趣可以看一下。

          效果:
          AzWindowsScrollPane.gif

          代碼:
          package?azure.ui.swing.components.scrollPane;

          import?java.awt.BorderLayout;
          import?java.awt.Dimension;
          import?java.awt.Rectangle;
          import?java.awt.event.AdjustmentEvent;
          import?java.awt.event.AdjustmentListener;
          import?java.awt.event.MouseWheelEvent;
          import?java.awt.event.MouseWheelListener;

          import?javax.swing.JFrame;
          import?javax.swing.JLabel;
          import?javax.swing.JPanel;
          import?javax.swing.JScrollBar;
          import?javax.swing.JScrollPane;
          import?javax.swing.JTable;
          import?javax.swing.JViewport;
          import?javax.swing.UIManager;
          import?javax.swing.border.EmptyBorder;

          /**
          ?*?
          @author?Azure
          ?*?
          @version?1.0?31/03/07
          ?
          */
          public?class?AzWindowsScrollFrame?extends?JFrame?implements?AdjustmentListener?{
          ????JScrollBar?vScrollBar?
          =?new?JScrollBar();

          ????JScrollBar?hScrollBar?
          =?new?JScrollBar();

          ????JTable?table;

          ????
          public?AzWindowsScrollFrame()?{
          ????????init();
          ????}

          ????
          public?static?void?main(String[]?args)?{
          ????????
          try?{
          ????????????UIManager
          ????????????????????.setLookAndFeel(
          "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
          ????????}?
          catch?(Exception?e)?{
          ????????????System.err.println(
          "Something?went?wrong!");
          ????????}
          ????????AzWindowsScrollFrame?sf?
          =?new?AzWindowsScrollFrame();
          ????????sf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          ????????sf.setLocationRelativeTo(
          null);
          ????????sf.setSize(
          new?Dimension(300,?200));
          ????????sf.setVisible(
          true);
          ????}

          ????
          private?void?init()?{
          ????????
          this.setLayout(new?BorderLayout());

          ????????Object?data[][]?
          =?{?{?"one",?"1",?"swing"?},?{?"two",?"2",?"is"?},
          ????????????????{?
          "three",?"3",?"very"?},?{?"four",?"4",?"nice"?},
          ????????????????{?
          "five",?"5",?"swing"?},?{?"six",?"6",?"is"?},
          ????????????????{?
          "seven",?"7",?"very"?},?{?"eight",?"8",?"nice"?},
          ????????????????{?
          "nine",?"9",?"swing"?},?{?"ten",?"10",?"is"?}?};
          ????????Object?headers[]?
          =?{?"col1",?"col2",?"col3"?};
          ????????table?
          =?new?JTable(data,?headers);
          ????????table.setPreferredSize(
          new?Dimension(500,?300));

          ????????JPanel?panel?
          =?new?JPanel();
          ????????panel.setLayout(
          new?BorderLayout());
          ????????JScrollPane?scrollPane?
          =?new?JScrollPane(table);
          ????????scrollPane
          ????????????????.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
          ????????scrollPane
          ????????????????.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
          ????????scrollPane.setBorder(
          new?EmptyBorder(0,?0,?0,?0));
          ????????panel.setBorder(
          new?EmptyBorder(0,?0,?0,?0));
          ????????panel.add(scrollPane,?BorderLayout.CENTER);

          ????????JPanel?hPanel?
          =?new?JPanel(new?BorderLayout());

          ????????hScrollBar.setOrientation(JScrollBar.HORIZONTAL);
          ????????
          int?visibleAmount?=?100;
          ????????hScrollBar.setVisibleAmount(visibleAmount);
          ????????hPanel.add(hScrollBar,?BorderLayout.CENTER);

          ????????JLabel?vConerlabel?
          =?new?JLabel();
          ????????vConerlabel.setMinimumSize(
          new?Dimension(15,?10));
          ????????vConerlabel.setPreferredSize(
          new?Dimension(15,?10));
          ????????vConerlabel.setBorder(
          new?EmptyBorder(0,?0,?0,?0));
          ????????hPanel.add(vConerlabel,?BorderLayout.EAST);

          ????????vScrollBar.addAdjustmentListener(
          this);
          ????????
          int?hVisibleAmount?=?60;
          ????????vScrollBar.setVisibleAmount(hVisibleAmount);
          ????????vScrollBar.setUnitIncrement(
          60);
          ????????vScrollBar.setValueIsAdjusting(
          true);

          ????????vScrollBar.addMouseWheelListener(
          new?MouseWheelListener()?{
          ????????????
          public?void?mouseWheelMoved(MouseWheelEvent?e)?{
          ????????????????vScrollBar.setValue(vScrollBar.getValue()
          ????????????????????????
          +?e.getWheelRotation()?*?60);
          ????????????}
          ????????});
          ????????hScrollBar.addAdjustmentListener(
          this);
          ????????hScrollBar.addMouseWheelListener(
          new?MouseWheelListener()?{
          ????????????
          public?void?mouseWheelMoved(MouseWheelEvent?e)?{
          ????????????????hScrollBar.setValue(hScrollBar.getValue()
          ????????????????????????
          +?e.getWheelRotation()?*?60);
          ????????????}
          ????????});

          ????????
          this.add(hPanel,?BorderLayout.SOUTH);
          ????????
          this.add(panel,?BorderLayout.CENTER);
          ????????
          this.add(vScrollBar,?BorderLayout.EAST);
          ????}

          ????
          public?void?adjustmentValueChanged(AdjustmentEvent?e)?{
          ????????
          if?(e.getSource()?==?vScrollBar)?{
          ????????????scrollToTableV(table,?e.getValue());

          ????????}?
          else?if?(e.getSource()?==?hScrollBar)?{
          ????????????scrollToTableH(table,?e.getValue());
          ????????}
          ????}

          ????
          public?void?scrollToTableH(JTable?table,?int?value)?{
          ????????
          if?(!(table.getParent()?instanceof?JViewport))?{
          ????????????
          return;
          ????????}
          ????????JViewport?viewport?
          =?(JViewport)?table.getParent();
          ????????Rectangle?viewRect?
          =?viewport.getViewRect();
          ????????Rectangle?rect?
          =?new?Rectangle(value?*?table.getWidth()?/?90,
          ????????????????(
          int)?viewRect.getY(),?10,?10);

          ????????rect.setLocation(rect.x?
          -?viewRect.x,?rect.y?-?viewRect.y);
          ????????viewport.scrollRectToVisible(rect);
          ????}

          ????
          public?void?scrollToTableV(JTable?table,?int?value)?{
          ????????
          if?(!(table.getParent()?instanceof?JViewport))?{
          ????????????
          return;
          ????????}
          ????????JViewport?viewport?
          =?(JViewport)?table.getParent();
          ????????Rectangle?viewRect?
          =?viewport.getViewRect();
          ????????Rectangle?rect?
          =?new?Rectangle((int)?viewRect.getX(),?value
          ????????????????
          *?table.getHeight()?/?90,?10,?10);

          ????????rect.setLocation(rect.x?
          -?viewRect.x,?rect.y?-?viewRect.y);
          ????????viewport.scrollRectToVisible(rect);
          ????}

          }

          posted on 2007-03-31 01:37 azure 閱讀(2000) 評(píng)論(2)  編輯  收藏

          評(píng)論

          # re: swing components-windows ScrollPane 2007-04-01 14:36 turbochen

          這樣做的意義何在?  回復(fù)  更多評(píng)論   

          # re: swing components-windows ScrollPane[未登錄](méi) 2007-04-01 17:27 azure

          研究一下而已,呵呵  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 浏阳市| 麻栗坡县| 武隆县| 静乐县| 邯郸市| 隆林| 江永县| 吉隆县| 高阳县| 东台市| 启东市| 马关县| 眉山市| 南乐县| 兴安县| 汶川县| 会同县| 临安市| 铁岭县| 厦门市| 大兴区| 攀枝花市| 青岛市| 沈阳市| 昌黎县| 谷城县| 肇东市| 汕头市| 呼玛县| 中山市| 紫云| 平和县| 忻城县| 贡嘎县| 论坛| 林口县| 贵溪市| 鹰潭市| 定远县| 夏邑县| 化州市|