自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java圖形界面開發(fā):高級(jí)Swing容器(三)

開發(fā) 后端
在本文中,我們將會(huì)了解一些構(gòu)建在這些布局管理器之上的容器以及其他的一些無需布局管理器的容器。詳細(xì)請(qǐng)看下文

11.5 JViewport類

JViewport很少在JScrollPane之外使用。通常情況下他位于JScrollPane的中間并且使用ViewportLayout管理器來響應(yīng)在小空間內(nèi)顯示大Component的定位請(qǐng)求。除了位于JScrollPane的中間以外,JViewport也可以用于JScrollPane的行頭與列頭。

11.5.1 創(chuàng)建JViewport

JViewport只有一個(gè)無參數(shù)的構(gòu)造函數(shù):public JViewport()。一旦我們創(chuàng)建了JViewport,我們可以通過setView(Component)向其中添加組件。

11.5.2 JViewport屬性

表11-10顯示了JViewport的13個(gè)屬性。將布局管理器設(shè)置為ViewportLayout以外的布局管理也可以的,但是并不推薦,因?yàn)閂iewportLayout布局管理器可以使得JViewport正確工作。


 

 

 

由于滾動(dòng)的復(fù)雜性以及性能原因,JViewport并不支持邊框。試著使用setBorder(Border)方法將邊框設(shè)置為非null會(huì)拋出IllegalArgumentException。因?yàn)闆]有邊框,所以insets屬性的設(shè)置總為(0,0,0,0)。我們不能在JViewport周圍顯示邊框,但是我們可以在視圖所在的組件周圍顯示邊框。只需要簡(jiǎn)單的在組件周圍放置一個(gè)邊框,或是將組件放在一個(gè)具有邊框的JPanel中,然后將其添加到JViewport。如果我們確實(shí)在組件周圍添加了邊框,只有當(dāng)組件部分可以見時(shí)邊框才可見。如果我們不希望邊框滾動(dòng),我們必須將JViewport放在類似JScrollPane這樣具有自己邊框的組件中。

提示,要設(shè)置顯示在JScrollPane中的背景色,我們需要設(shè)置視圖區(qū)域的背景色:aScrollPane.getViewport().setBackground(newColor)。

視圖的尺寸(viewSize屬性)是基于JViewport內(nèi)組件的尺寸的(view屬性)。視圖位置(viewPosition屬性)是視圖矩形區(qū)域(viewRect屬性)的左上角,其中矩形區(qū)域的尺寸是視圖區(qū)域的擴(kuò)展尺寸(extentSize屬性)。如果感到迷惑,圖11-18會(huì)有助于我們理解JViewport中的各種屬性。


 

 

 

scrollMode屬性可以設(shè)置為表11-11中所列的類常量的一個(gè)。在大多數(shù)情況下,我們可以使用默認(rèn)的BLIST_SCROLL_MODE模式。


 

 

 

為了在周圍移動(dòng)視圖的可見部分,我們只需要修改viewPosition屬性。這會(huì)移動(dòng)viewRect,使得我們可以看到視圖的不同部分。為了顯示這一行為,列表11-5中的程序?qū)㈡I盤快捷鍵綁定到了JViewport,從而我們可以使用箭頭鍵來移動(dòng)視圖。(通常情況下,JScrollPane會(huì)獲得這些鍵盤動(dòng)作。)代碼的主要部分對(duì)于設(shè)置相應(yīng)的輸入/動(dòng)作映射是必須的。以粗體顯示的代碼是移動(dòng)視圖所必須的。

  1. package swingstudy.ch11;  
  2.    
  3. import java.awt.BorderLayout;  
  4. import java.awt.Dimension;  
  5. import java.awt.EventQueue;  
  6. import java.awt.Point;  
  7. import java.awt.event.ActionEvent;  
  8.    
  9. import javax.swing.AbstractAction;  
  10. import javax.swing.Action;  
  11. import javax.swing.ActionMap;  
  12. import javax.swing.Icon;  
  13. import javax.swing.ImageIcon;  
  14. import javax.swing.InputMap;  
  15. import javax.swing.JComponent;  
  16. import javax.swing.JFrame;  
  17. import javax.swing.JLabel;  
  18. import javax.swing.JViewport;  
  19. import javax.swing.KeyStroke;  
  20.    
  21. public class MoveViewSample {  
  22.    
  23.     public static final int INCREASE = 0// direction  
  24.     public static final int DECREASE = 1// direction  
  25.     public static final int X_AXIS = 0// axis  
  26.     public static final int Y_AXIS = 1// axis  
  27.     public static final int UNIT = 0;   // type  
  28.     public static final int BLOCK = 1;  // type  
  29.    
  30.     static class MoveAction extends AbstractAction {  
  31.         JViewport viewport;  
  32.         int direction;  
  33.         int axis;  
  34.         int type;  
  35.         public MoveAction(JViewport viewport, int direction, int axis, int type) {  
  36.             if(viewport == null) {  
  37.                 throw new IllegalArgumentException("null viewport not permitted");  
  38.             }  
  39.             this.viewport = viewport;  
  40.             this.direction = direction;  
  41.             this.axis = axis;  
  42.             this.type = type;  
  43.         }  
  44.    
  45.         public void actionPerformed(ActionEvent event) {  
  46.             Dimension extentSize = viewport.getExtentSize();  
  47.             int horizontalMoveSize = 0;  
  48.             int verticalMoveSize = 0;  
  49.             if(axis == X_AXIS) {  
  50.                 if(type == UNIT) {  
  51.                     horizontalMoveSize = 1;  
  52.                 }  
  53.                 else {  
  54.                     // type == BLOCK  
  55.                     horizontalMoveSize = extentSize.width;  
  56.                 }  
  57.             }  
  58.             else {  
  59.                 // axis == Y_AXIS  
  60.                 if(type == UNIT) {  
  61.                     verticalMoveSize = 1;  
  62.                 }  
  63.                 else {  
  64.                     // type = BLOCK  
  65.                     verticalMoveSize = extentSize.height;  
  66.                 }  
  67.             }  
  68.             if(direction == DECREASE) {  
  69.                 horizontalMoveSize = -horizontalMoveSize;  
  70.                 verticalMoveSize = -verticalMoveSize;  
  71.             }  
  72.             // translate origin by some amount  
  73.             Point origin = viewport.getViewPosition();  
  74.             origin.x += horizontalMoveSize;  
  75.             origin.y += verticalMoveSize;  
  76.             // set new viewing origin  
  77.             viewport.setViewPosition(origin);  
  78.         }  
  79.     }  
  80.    
  81.     /**  
  82.      * @param args  
  83.      */ 
  84.     public static void main(String[] args) {  
  85.         // TODO Auto-generated method stub  
  86.    
  87.         Runnable runner = new Runnable() {  
  88.             public void run() {  
  89.                 JFrame frame = new JFrame("JViewport Sample");  
  90.                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  91.                 Icon icon = new ImageIcon("dog.jpg");  
  92.                 JLabel dogLabel = new JLabel(icon);  
  93.                 JViewport viewport =  new JViewport();  
  94.                 viewport.setView(dogLabel);  
  95.    
  96.                 InputMap inputMap = viewport.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);  
  97.                 ActionMap actionMap = viewport.getActionMap();  
  98.    
  99.                 // up key moves view up unit  
  100.                 Action upKeyAction = new MoveAction(viewport, DECREASE, Y_AXIS, UNIT);  
  101.                 KeyStroke upKey = KeyStroke.getKeyStroke("UP");  
  102.                 inputMap.put(upKey, "up");  
  103.                 actionMap.put("up", upKeyAction);  
  104.    
  105.                 // down key moves view down unit  
  106.                 Action downKeyAction = new MoveAction(viewport, INCREASE, Y_AXIS, UNIT);  
  107.                 KeyStroke downKey = KeyStroke.getKeyStroke("DOWN");  
  108.                 inputMap.put(downKey, "down");  
  109.                 actionMap.put("down", downKeyAction);  
  110.    
  111.                 // left key moves view left unit  
  112.                 Action leftKeyAction = new MoveAction(viewport, DECREASE, X_AXIS, UNIT);  
  113.                 KeyStroke leftKey = KeyStroke.getKeyStroke("LEFT");  
  114.                 inputMap.put(leftKey, "left");  
  115.                 actionMap.put("left", leftKeyAction);  
  116.    
  117.                 // right key mvoes view right unit  
  118.                 Action rightKeyAction = new MoveAction(viewport, INCREASE, X_AXIS, UNIT);  
  119.                 KeyStroke rightKey = KeyStroke.getKeyStroke("RIGHT");  
  120.                 inputMap.put(rightKey, "right");  
  121.                 actionMap.put("right", rightKeyAction);  
  122.    
  123.                 // pgup key moves view up block  
  124.                 Action pgUpKeyAction = new MoveAction(viewport, DECREASE, Y_AXIS, BLOCK);  
  125.                 KeyStroke pgUpKey = KeyStroke.getKeyStroke("PAGE_UP");  
  126.                 inputMap.put(pgUpKey, "pgUp");  
  127.                 actionMap.put("pgUp", pgUpKeyAction);  
  128.    
  129.                 // pgdn key moves view down block  
  130.                 Action pgDnKeyAction = new MoveAction(viewport, INCREASE, Y_AXIS, BLOCK);  
  131.                 KeyStroke pgDnKey = KeyStroke.getKeyStroke("PAGE_DOWN");  
  132.                 inputMap.put(pgDnKey, "pgDn");  
  133.                 actionMap.put("pgDn", pgDnKeyAction);  
  134.    
  135.                 // shift-pgup key moves view left block  
  136.                 Action shiftPgUpKeyAction = new MoveAction(viewport, DECREASE, X_AXIS, BLOCK);  
  137.                 KeyStroke shiftPgUpKey = KeyStroke.getKeyStroke("shift PAGE_UP");  
  138.                 inputMap.put(shiftPgUpKey, "shiftPgUp");  
  139.                 actionMap.put("shiftPgUp", shiftPgUpKeyAction);  
  140.    
  141.                 // shift-pgdn key moves view right block  
  142.                 Action shiftPgDnKeyAction = new MoveAction(viewport, INCREASE, X_AXIS, BLOCK);  
  143.                 KeyStroke shiftPgDnKey = KeyStroke.getKeyStroke("shift PAGE_DOWN");  
  144.                 inputMap.put(shiftPgDnKey, "shiftPgDn");  
  145.                 actionMap.put("shiftPgDn", shiftPgDnKeyAction);  
  146.    
  147.                 frame.add(viewport, BorderLayout.CENTER);  
  148.                 frame.setSize(300200);  
  149.                 frame.setVisible(true);  
  150.             }  
  151.         };  
  152.         EventQueue.invokeLater(runner);  
  153.     }  
  154.    

11.5.3 自定義JViewport觀感

每一個(gè)可安裝的Swing觀感通過BasicViewportUI共享相同的JViewport外觀,并沒有實(shí)際外觀上的區(qū)別。然而,仍然存在一個(gè)JViewport的UIResource相關(guān)屬性集合,如表11-12所示。對(duì)于JViewport組件,有四個(gè)這樣的屬性。


 

 

 

11.6 小結(jié)

在本章中,我們探討了一些高級(jí)的Swing容器。對(duì)于Box類,我們可以更容易的使用BoxLayout管理器考慮到組件的最小尺寸,***尺寸與***尺寸以***的可能方式來創(chuàng)建單行或單列的組件。

對(duì)于JSplitPane組件,我們可以通過在其所包含的兩個(gè)組件間添加分隔符來創(chuàng)建一行或一列的組件,并允許用戶通過移動(dòng)分隔符來手動(dòng)修改組件的尺寸。

JTabbedPane容器每次只顯示所包含的組件集合中的一個(gè)組件。所顯示的組件是通過用戶選擇標(biāo)簽來選擇的,標(biāo)簽中可以包含具有或是不具有熱鍵的標(biāo)題,圖標(biāo)以及工具提示文本。這就是我們通常在程序中見到的流行的屬性頁。

JScrollPane與JViewport容器可以使得我們?cè)谝恍^(qū)域內(nèi)顯示一個(gè)大組件。JScrollPane添加了滾動(dòng)條使得終端用戶移動(dòng)可視化部分,而JViewport沒有添加這些滾動(dòng)條。

在第12章中,我們將會(huì)再次探討Swing庫中的單個(gè)組件,包括JProgressBar,JScrollBar以及共享BoundedRangeModel作為其數(shù)據(jù)模型的JSlider。
 

原文鏈接:http://blog.csdn.net/mylxiaoyi/article/details/7487194

【編輯推薦】

  1. Java圖形界面開發(fā):高級(jí)Swing容器(二)
  2. Java圖形界面開發(fā):高級(jí)Swing容器(一)
  3. Java圖形用戶界面:高級(jí)組件綜合例子
責(zé)任編輯:林師授 來源: mylxiaoyi的博客
相關(guān)推薦

2012-04-24 09:40:42

SwingJava

2012-04-27 15:21:45

JavaSwing

2011-07-28 17:40:04

MySQLMySQL Workb

2012-01-16 11:03:09

javaswing

2010-11-25 09:05:53

MonoDevelop

2009-05-26 15:22:14

Linux圖形備份

2011-02-22 18:09:08

2011-10-11 13:22:55

FreeBSD

2016-10-28 08:57:56

Git圖形界面

2010-03-03 17:50:45

Android圖形界面

2009-09-10 10:02:18

VxWorksLinux圖形界面Linux

2021-11-08 08:14:50

Python圖形界面框架

2011-09-06 15:10:20

Ubuntu圖形界面

2021-02-04 11:08:00

LinuxSSH工具

2010-01-07 10:04:49

Ubuntu圖形

2024-12-23 14:54:47

2012-04-19 13:21:02

Javaswing

2009-03-06 15:12:24

LinuxUbuntuPrefixSuffi

2009-10-13 14:44:02

圖形界面linuxunix

2019-02-21 19:00:49

LinuxSSH圖形界面工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)