成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

11.5 JViewport類

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

11.5.1 創(chuàng)建JViewport

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

11.5.2 JViewport屬性

表11-10顯示了JViewport的13個屬性。將布局管理器設置為ViewportLayout以外的布局管理也可以的,但是并不推薦,因為ViewportLayout布局管理器可以使得JViewport正確工作。


 

 

 

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

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

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


 

 

 

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


 

 

 

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

  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觀感

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


 

 

 

11.6 小結

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

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

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

JScrollPane與JViewport容器可以使得我們在一小區(qū)域內顯示一個大組件。JScrollPane添加了滾動條使得終端用戶移動可視化部分,而JViewport沒有添加這些滾動條。

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

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

【編輯推薦】

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

2012-04-24 09:40:42

SwingJava

2012-04-27 15:21:45

JavaSwing

2011-07-28 17:40:04

MySQLMySQL Workb

2010-11-25 09:05:53

MonoDevelop

2012-01-16 11:03:09

javaswing

2010-03-03 17:50:45

Android圖形界面

2011-10-11 13:22:55

FreeBSD

2009-05-26 15:22:14

Linux圖形備份

2016-10-28 08:57:56

Git圖形界面

2011-02-22 18:09:08

2009-09-10 10:02:18

VxWorksLinux圖形界面Linux

2011-09-06 15:10:20

Ubuntu圖形界面

2021-02-04 11:08:00

LinuxSSH工具

2021-11-08 08:14:50

Python圖形界面框架

2010-01-07 10:04:49

Ubuntu圖形

2012-04-19 13:21:02

Javaswing

2024-12-23 14:54:47

2019-02-21 19:00:49

LinuxSSH圖形界面工具

2009-03-06 15:12:24

LinuxUbuntuPrefixSuffi

2009-10-13 14:44:02

圖形界面linuxunix
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人一区二区三区 | 午夜日韩视频 | 天堂一区二区三区 | 亚洲性人人天天夜夜摸 | 99这里只有精品视频 | 亚洲性人人天天夜夜摸 | 日韩高清一区 | 青青草av在线播放 | 七七婷婷婷婷精品国产 | 成人av一区二区亚洲精 | 日本成人久久 | 黄网站免费在线看 | 国产精品mv在线观看 | 国产精品精品视频一区二区三区 | 亚洲成人福利视频 | 伊人免费观看视频 | 欧洲视频一区 | 久草青青草 | 天天干狠狠操 | 午夜ww| 国产欧美精品一区二区 | 精品视频一区二区 | 亚洲网站在线播放 | 精品欧美一区二区中文字幕视频 | 欧美成人性生活 | 麻豆国产一区二区三区四区 | 一级黄色录像片子 | 亚洲一区二区中文字幕 | 美女一区| 久久精品亚洲 | 久久99精品久久 | 午夜免费观看体验区 | 成人在线观看黄 | 久久精品色欧美aⅴ一区二区 | 国产一区二区免费 | 中文字幕欧美一区二区 | 欧美www在线 | 在线免费观看毛片 | 在线一区二区观看 | 精品国产一区二区在线 | 国产91丝袜在线熟 |