📄 s13.htm
字号:
viewPositionLabel.setText("View Position: " + <br> viewPosition.toString());<br> viewSizeLabel.setText("View Size: " + <br> viewSize.toString());<br> revalidate();<br> }<br> });<br> }<br> }<br> class ControlPanel extends JPanel { <br> private JViewport viewport;</p> <p> private JButton[] buttons = {<br> new JButton("up"), new JButton("down"),<br> new JButton("left"), new JButton("right"),<br> };</p> <p> public ControlPanel(JViewport vp) {<br> viewport = vp;</p> <p> for(int i=0; i < 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("up")) vp.y += 5; <br> else if(actionCmd.equals("down")) vp.y -= 5; <br> else if(actionCmd.equals("left")) vp.x += 5; <br> else if(actionCmd.equals("right")) vp.x -= 5; </p> <p> viewport.setViewPosition(vp);<br> }<br> }</p> <hr size="1" noshade> <p> 13.1.5 JViewport类总结</p> <p> </p> <p>13.1.6 AWT兼容</p> <p> </p> <p align="center"><b>例13-5 使用JScrollPane</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> JLabel view = new JLabel(new ImageIcon("cutlery.jpg",<br> "A picture of cutlery"));<br> JScrollPane sp = new JScrollPane(view);</p> <p> contentPane.add(sp);<br> }<br> }</p> <hr size="1" noshade> <p> 13.2 JScrollPane</p> <p> </p> <p> 13.2.1 滚动窗格的头部</p> <p> </p> <p align="center"><b>例13-6 为滚动窗格的头部指定视图</b></p> <hr noshade size="1"> import java.awt.*;<br> import javax.swing.*; <p>public class Test extends JApplet {<br> public Test() {<br> Container contentPane = getContentPane();<br> JLabel columnHeaderView = new JLabel(<br> new ImageIcon("horizontalRuler.jpg",<br> "horizontal ruler"));<br> JLabel rowHeaderView = new JLabel(<br> new ImageIcon("verticalRuler.jpg",<br> "vertical ruler"));<br> JLabel view = new JLabel(<br> new ImageIcon("grapes.jpg",<br> "grapes"));</p> <p> JScrollPane sp = new JScrollPane(view);</p> <p> sp.setColumnHeaderView(columnHeaderView);<br> sp.setRowHeaderView(rowHeaderView);</p> <p> sp.setViewportBorder(<br> BorderFactory.createRaisedBevelBorder());</p> <p> contentPane.add(sp);<br> }<br> }</p> <hr size="1" noshade> <p align="center"><b>例13-7 设置头部视口</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 void init() {<br> Container contentPane = getContentPane();<br> JViewport columnHeaderViewport = new JViewport();<br> JViewport rowHeaderViewport = new JViewport();</p> <p> JLabel columnHeaderView = new JLabel(<br> new ImageIcon("horizontalRuler.jpg"));<br> JLabel rowHeaderView = new JLabel(<br> new ImageIcon("verticalRuler.jpg"));<br> JLabel view = new JLabel(<br> new ImageIcon("strawberry.jpg"));</p> <p> JScrollPane sp = new JScrollPane(view);</p> <p> sp.setToolTipText(<br> "Drag the headers to drag the picture!");</p> <p> HeaderViewDragListener verticalHeaderListener = <br> new HeaderViewDragListener(sp, <br> SwingConstants.VERTICAL);</p> <p> HeaderViewDragListener horizontalHeaderListener = <br> new HeaderViewDragListener(sp, <br> SwingConstants.HORIZONTAL);</p> <p> columnHeaderViewport.addMouseListener(<br> horizontalHeaderListener);<br> columnHeaderViewport.addMouseMotionListener(<br> horizontalHeaderListener);</p> <p> rowHeaderViewport.addMouseListener(<br> verticalHeaderListener);<br> rowHeaderViewport.addMouseMotionListener(<br> verticalHeaderListener);</p> <p> // headers must be set before header views<br> sp.setColumnHeader(columnHeaderViewport);<br> sp.setRowHeader(rowHeaderViewport);</p> <p> sp.setColumnHeaderView(columnHeaderView);<br> sp.setRowHeaderView(rowHeaderView);</p> <p> contentPane.add(sp);<br> }<br> }<br> class HeaderViewDragListener extends MouseAdapter<br> implements MouseMotionListener,<br> SwingConstants {<br> private Point last = new Point();<br> private JScrollPane scrollpane; <br> private int orientation;</p> <p> public HeaderViewDragListener(JScrollPane sp, int orient) {<br> scrollpane = sp;<br> orientation = orient;<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> JViewport headerViewport = (JViewport)e.getSource();<br> JViewport scrollpaneViewport = scrollpane.getViewport();<br> Dimension viewSize = scrollpaneViewport.getViewSize(),<br> extent = scrollpaneViewport.getExtentSize();</p> <p> Point drag = e.getPoint();<br> Point offset = new Point(drag.x-last.x, drag.y-last.y);<br> Point headerPosition = new Point(), viewportPosition;</p> <p> viewportPosition = scrollpaneViewport.getViewPosition();</p> <p> if(orientation == HORIZONTAL) {<br> int nextX = viewportPosition.x - offset.x;<br> int rightEdge = extent.width + nextX;</p> <p> if(nextX > 0 && rightEdge < viewSize.width) {<br> headerPosition.x = nextX;<br> viewportPosition.x = nextX;<br> }<br> }<br> if(orientation == VERTICAL) { <br> int nextY = viewportPosition.y - offset.y;<br> int bottomEdge = extent.height + nextY;</p> <p> if(nextY > 0 && bottomEdge < viewSize.height) {<br> headerPosition.y = nextY;<br> viewportPosition.y = nextY;<br> }<br> }<br> headerViewport.setViewPosition(headerPosition);<br> scrollpaneViewport.setViewPosition(viewportPosition);</p> <p> last.x = drag.x;<br> last.y = drag.y;<br> }<br> }</p> <hr size="1" noshade> <p> </p> <p> 13.2.2 滚动窗的角部</p> <p> </p> <p align="center"><b>例13-8 指定滚动窗格的角部的组件</b></p> <hr noshade size="1"> import java.awt.*;<br> import javax.swing.*;<br> import javax.swing.border.*; <p>public class Test extends JApplet {<br> public Test() {<br> Container contentPane = getContentPane();<br> JLabel columnHeaderView = new JLabel(<br> new ImageIcon("horizontalRuler.jpg"));<br> JLabel rowHeaderView = new JLabel(<br> new ImageIcon("verticalRuler.jpg"));<br> JLabel view = new JLabel(<br> new ImageIcon("anjinAndMariko.gif"));</p> <p> JScrollPane sp = new JScrollPane(view);</p> <p> JPanel corners[] = {<br> new JPanel(), new JPanel(),<br> new JPanel(), new JPanel()<br> };<br> String cornerConstants[] = {<br> ScrollPaneConstants.UPPER_LEFT_CORNER,<br> ScrollPaneConstants.LOWER_LEFT_CORNER,<br> ScrollPaneConstants.UPPER_RIGHT_CORNER,<br> ScrollPaneConstants.LOWER_RIGHT_CORNER,<br> };<br> Border border = BorderFactory.createEtchedBorder();</p> <p> for(int i=0; i < corners.length; ++i) {<br> corners[i].setBorder(border);<br> sp.setCorner(cornerConstants[i], corners[i]);<br> }</p> <p> sp.setColumnHeaderView(columnHeaderView);<br> sp.setRowHeaderView(rowHeaderView);<br> contentPane.add(sp);<br> }<br> }</p> <hr size="1" noshade> <p> 13.2.3 JViewport属性</p> <p> </p> <p> 13.2.4 JViewport事件</p> <p> </p> <p> 13.2.5 JViewport类总结</p> <p> </p> <p align="center"><b>例13-9 透明和不透明滚动窗格</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 void init() {<br> Container contentPane = new CustomContentPane();<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -