⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s13.htm

📁 书籍主要用于做图形界面使用里面后好多
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<SCRIPT LANGUAGE="JavaScript" SRC="/-fs0/sys/pop-up.js"></SCRIPT><SCRIPT LANGUAGE="JavaScript" SRC="/-fs0/sys/pop-up-all.js"></SCRIPT><html><head><title>易都网--Java 2 图形设计卷Ⅱ:SWING</title><LINK rel="stylesheet" href="../../../_public/javaa.css"><meta http-equiv="Content-Type" content="text/html; charset=GBK"><script language="JavaScript" src="../../../_public/javaa.js"></script><meta name="keywords" content="Java,JSP,ASP,PHP,J2EE,EJB,JavaScript,C/C++,ASM,CSS,HTML,XML,网络安全,MySQL,ACCESS"></head><body bgcolor="#FFFFFF"><table border=0 cellpadding=0 cellspacing=0 width="100%">  <tbody>   <script language="javascript">print2()</script>  <tr>     <td width="100%">       <table bgcolor=#EEEEEE border=0 cellpadding=3 cellspacing=0 width="100%">        <tbody>         <tr>           <td class=f1 id=thetd width="100%">             <p>[<a href="index.html" target="_self">目录</a>][<a href="s12.htm">上一页</a>][<a href="s14.htm">下一页</a>]</p>            <p align="center"><b>第13章 滚动</b></p>            <p>  本章介绍Swing的滚动体系结构,这个体系结构包括两个轻量Swing容器、一个Scrollable接口、和一个JScrollBar类。其中,这两个轻量Swing容器是JViewport和JScrollPane,设计这个Scrollable接口来支持有特殊滚动需求的组件。<br>                JViewport实例很少被实例化,也很少被直接使用,然而,本章仍将用相当大的篇幅来介绍JViewport类,因为它是Swing滚动体系结构的基础组件。<br>                设计JScrollPane组件来替代AWT的重量组件ScrollPane。JScrollPane在AWT的ScrollPane基础上做了许多改进,包括具有配置行头部的能力和具有指定在滚动窗格角部组件的能力。<br>                Scrollable接口是为表格、树、文本组件和列表等包含数据行或数据列的可滚动组件而设计的。<br>                JScrollBar组件是一个用来实现手动滚动的滚动条。虽然Swing的JScrollPane组件在大多数滚动情况是足够用了,但是,有时为了性能或资源的考,还必须实现手动滚动。在这种情况下,可以用JScrollBar组件来滚动容器的内容。             </p>            <p> <b>13.1 JViewport</b></p>            <p>  JViewport类是Swing滚动体系结构的基础。就如它的名字所指出的那样,JViewport的实例提供一个视口,视图的特定区域可以显示在这个视口中。可以操纵由视口显示的视图的位置,以便在不同的时刻,使不同的视图区域出现在这个视口中。<br>                图13-1所示的小应用程序包含JViewport的一个实例,它的视图是JLabel的一个实例。该标签配备了一幅比显示图像的视口还要大的图像。这个小应用程序提供了四个用于调整视口中视图位置的按钮。<br>                图13-1中的左图显示这个小应用程序开始时的样子。右图显示出在反复激活up和left按钮后,这个小应用程序的梯子。应该强调的是,反复激活按钮不是滚动视口中视图最理想的方式,但是它说明了一个视口是怎样调整其视图位置的。<br>                这个小应用程序创建JViewport的一个实例和JLabel的一个实例。通过调用JVieweport.setView()来指定这个标签作为视口的视图。这个小应用程序还创建了一个ControlPanel实例(它是JPanel的一个扩展),这个实例包含了四个用于滚动标签的按钮。             </p>            <p align="center"><b>例13-1 用JViewport的一个实例来滚动一幅图像</b></p>            <hr noshade size="1">            import java.awt.*;<br>            import java.awt.event.*;<br>            import javax.swing.*;            <p>public class Test extends JApplet {<br>              public Test() {<br>              Container contentPane = getContentPane();<br>              JViewport viewport = new JViewport();<br>              JPanel view = new JPanel();</p>            <p> view.add(new JLabel(<br>              new ImageIcon(&quot;anjinAndMariko.gif&quot;)));</p>            <p> viewport.setView(view);</p>            <p> contentPane.add(new ControlPanel(viewport), <br>              BorderLayout.NORTH);<br>              contentPane.add(viewport, BorderLayout.CENTER);<br>              }<br>              }<br>              class ControlPanel extends JPanel { <br>              private JViewport viewport;</p>            <p> private JButton[] buttons = {<br>              new JButton(&quot;up&quot;), new JButton(&quot;down&quot;),<br>              new JButton(&quot;left&quot;), new JButton(&quot;right&quot;)<br>              };</p>            <p> public ControlPanel(JViewport vp) {<br>              viewport = vp;</p>            <p> for(int i=0; i &lt; buttons.length; ++i) {<br>              add(buttons[i]);</p>            <p> buttons[i].addActionListener(new ActionListener() {<br>              public void actionPerformed(ActionEvent e) {<br>              scroll(e.getActionCommand());<br>              }<br>              });<br>              }<br>              }<br>              private void scroll(String actionCmd) {<br>              Point vp = viewport.getViewPosition();</p>            <p> if(actionCmd.equals(&quot;up&quot;)) vp.y += 5; <br>              else if(actionCmd.equals(&quot;down&quot;)) vp.y -= 5; <br>              else if(actionCmd.equals(&quot;left&quot;)) vp.x += 5; <br>              else if(actionCmd.equals(&quot;right&quot;)) vp.x -= 5; </p>            <p> viewport.setViewPosition(vp);<br>              }<br>              }</p>            <hr size="1" noshade>            <p> 13.1.1 拖动视口中的视图</p>            <p>&nbsp;</p>            <p align="center"><b>例13-2 拖动视口中的视图</b></p>            <hr noshade size="1">            import java.awt.*;<br>            import java.awt.event.*;<br>            import javax.swing.*;            <p>public class Test extends JApplet {<br>              public Test() {<br>              Container contentPane = getContentPane();<br>              JLabel label = new JLabel(new ImageIcon(&quot;pic.gif&quot;));<br>              JViewport vp = new JViewport();<br>              ViewportDragListener listener = <br>              new ViewportDragListener(vp);</p>            <p> vp.setView(label);<br>              vp.addMouseListener(listener);<br>              vp.addMouseMotionListener(listener);</p>            <p> contentPane.add(vp, BorderLayout.CENTER);<br>              }<br>              }<br>              class ViewportDragListener extends MouseAdapter<br>              implements MouseMotionListener {<br>              private JViewport viewport;<br>              private Point last = new Point(), scrollTo = new Point();</p>            <p> public ViewportDragListener(JViewport viewport) {<br>              this.viewport = viewport; <br>              }<br>              public void mousePressed(MouseEvent e) {<br>              last.x = e.getPoint().x;<br>              last.y = e.getPoint().y;<br>              }<br>              public void mouseMoved(MouseEvent e) {<br>              }<br>              public void mouseDragged(MouseEvent e) {<br>              Point drag = e.getPoint();<br>              Point viewPos = viewport.getViewPosition();<br>              Point offset = new Point(drag.x-last.x, drag.y-last.y);<br>              last.x = drag.x;<br>              last.y = drag.y;</p>            <p> if(viewport.contains(drag)) {<br>              scrollTo.x = viewPos.x - offset.x;<br>              scrollTo.y = viewPos.y - offset.y;<br>              viewport.setViewPosition(scrollTo);<br>              }<br>              }<br>              }</p>            <hr size="1" noshade>            <p> 13.1.2 使用scrollRectToVisible</p>            <p>&nbsp;</p>            <p align="center"><b>例13-3 使用scrollRectToVisible()</b></p>            <hr noshade size="1">            import java.awt.*;<br>            import java.awt.event.*;<br>            import javax.swing.*;<br>            import javax.swing.event.*;            <p>public class Test extends JApplet {<br>              private JButton buttons[] = {<br>              new JButton(), new JButton(), new JButton(),<br>              new JButton(), new JButton(), new JButton(),<br>              new JButton(), new JButton(), new JButton(),<br>              new JButton(), new JButton(), new JButton(),<br>              new JButton(), new JButton(), new JButton(),<br>              new JButton(), new JButton(), new JButton(),<br>              };<br>              public Test() {<br>              Container contentPane = getContentPane();<br>              JViewport viewport = new JViewport();<br>              JPanel view = new JPanel();<br>              JPanel controlPanel = new ControlPanel(buttons);</p>            <p> view.setLayout(new GridLayout(0,3));</p>            <p> for(int i=0; i &lt; buttons.length; ++i) {<br>              buttons[i].setText(&quot;button # &quot; + i);<br>              buttons[i].setPreferredSize(new Dimension(150,50));<br>              view.add(buttons[i]);<br>              }</p>            <p> viewport.setView(view);</p>            <p> contentPane.add(controlPanel, BorderLayout.NORTH);<br>              contentPane.add(viewport, BorderLayout.CENTER);<br>              }<br>              }<br>              class ControlPanel extends JPanel { <br>              private JComboBox combo = new JComboBox();</p>            <p> public ControlPanel(final JButton[] buttons) {<br>              add(combo);</p>            <p> for(int i=0; i &lt; buttons.length; ++i) {<br>              combo.addItem(&quot;button number &quot; + i);<br>              }<br>              combo.addItemListener(new ItemListener() {<br>              public void itemStateChanged(ItemEvent e) {<br>              int index = combo.getSelectedIndex();<br>              JButton button = buttons[index];<br>              Dimension size = button.getSize();</p>            <p> buttons[index].scrollRectToVisible(<br>              new Rectangle(0,0, size.width,size.height));<br>              }<br>              });<br>              }<br>              }</p>            <hr size="1" noshade>            <p> 13.1.3 JViewport属性</p>            <p>&nbsp;</p>            <p> 13.1.4 JViewport事件</p>            <p>&nbsp;</p>            <p align="center"><b>例13-4 对JViewport变化事件的响应</b></p>            <hr noshade size="1">            import java.awt.*;<br>            import java.awt.event.*;<br>            import javax.swing.*;<br>            import javax.swing.event.*;            <p>public class Test extends JApplet {<br>              public Test() {<br>              Container contentPane = getContentPane();<br>              JViewport viewport = new JViewport();<br>              JPanel view = new JPanel();</p>            <p> view.add(new JLabel(<br>              new ImageIcon(&quot;anjinAndMariko.gif&quot;)));</p>            <p> viewport.setView(view);</p>            <p> contentPane.add(new ControlPanel(viewport), <br>              BorderLayout.NORTH);<br>              contentPane.add(viewport, BorderLayout.CENTER);<br>              contentPane.add(new StatusPanel(viewport),<br>              BorderLayout.SOUTH);<br>              }<br>              }<br>              class StatusPanel extends JPanel { <br>              private JLabel extentLabel = new JLabel(),<br>              viewPositionLabel = new JLabel(),<br>              viewSizeLabel = new JLabel();<br>              private JViewport viewport;</p>            <p> public StatusPanel(JViewport vp) {<br>              viewport = vp;</p>            <p> setBorder(BorderFactory.createEtchedBorder());<br>              setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));</p>            <p> extentLabel.setAlignmentX(0.5f);<br>              viewPositionLabel.setAlignmentX(0.5f);<br>              viewSizeLabel.setAlignmentX(0.5f);</p>            <p> add(extentLabel);<br>              add(viewPositionLabel);<br>              add(viewSizeLabel);</p>            <p> viewport.addChangeListener(new ChangeListener() {<br>              public void stateChanged(ChangeEvent e) {<br>              Dimension extent = viewport.getExtentSize();<br>              Point viewPosition = viewport.getViewPosition();<br>              Rectangle viewSize = viewport.getViewRect();</p>            <p> extentLabel.setText(&quot;View Extent: &quot; + <br>              extent.toString());<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -