?? s12.htm
字號:
<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="s11.htm">上一頁</a>][<a href="s13.htm">下一頁</a>]</p> <p align="center"><b>第12章 輕量容器</b></p> <p> 本章討論如下Swing輕量容器:<br> ·JPanel<br> ·JRootPane<br> ·JLayeredPane<br> ·JTabbedPane<br> ·JSplitPane<br> JPanel是AWT的Canvas和Panel類的繼承類。文本和圖形都可以繪制到JPanel實例中,并且JPanel實例可以用作一個通用容器。<br> JRootPane是一個包含在窗體、對話框、窗口、內部窗體和Swing小應用程序等Swing頂層容器中的容器。<br> JLayeredPane允許把它所包含的組件放置在不同的層中。層控制顯示組件的深度。<br> JTabbedPane是一個能夠包含多個組件的容器。JTabbedPane包含的多個組件一次只能顯示一個。JTabbedPane的實例包含能夠用于選取當前顯示的組件的選項卡。<br> JSplitPane包含兩個組件,這兩個組件由一個分隔體所分隔。可以拖動分隔體以改變每個組件所占據的空間大小。</p> <p> <b>12.1 JPanel</b></p> <p> JPanel是最簡單的Swing組件之一;但它也是使用最多的組件之一。Swing在很多其他組件中使用了JPanel實例;例如,缺省時,JRootPane容器為它的內容窗格和玻璃窗格創建了JPanel實例,正如表12-1所反映的那樣。<br> JPanel類具有簡單容器顯示圖形的畫布的雙重功能。圖12-1示出的小應用程序創建了三個JPanel實例:一個包含“Name:”選項卡和文本域的控制面板、一個專門用作顯示文本和圖形的畫布的窗格,以及包含上述控制面板和畫面的第三個面板。<br> 例12-1中列出了圖12-1中示出的小應用程序的代碼。</p> <p align="center"> <b>例12-1 一個使用了三個JPanel實例的小應用程序</b></p> <hr noshade size="1"><pre>import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Test extends JApplet { public Test() { Container contentPane = getContentPane(); JPanel panel = new JPanel(new BorderLayout()); JPanel controlPanel = new JPanel(); JPanel canvas = new Canvas(); canvas.setBorder( BorderFactory.createLineBorder(Color.black)); controlPanel.add(new JLabel("Name:")); controlPanel.add(new JTextField(20)); panel.add(controlPanel, BorderLayout.NORTH); panel.add(canvas, BorderLayout.CENTER); contentPane.add(panel); }}class Canvas extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); Dimension size = getSize(); g.setColor(Color.black); g.drawLine(50,50,size.width,size.height); g.drawArc(20,40,25,25,0,290); g.drawString("A JPanel Used as a Canvas", 20, 20); }}</pre> <hr size="1" noshade> <p></p> <p></p> <p> <b>12.1.1 JPanel的屬性</b></p> <p> </p> <p> 12.1.2 JPanel的事件</p> <p> </p> <p> 12.1.3 JPanel類總結</p> <p> </p> <p> 12.1.4 AWT兼容</p> <p> </p> <p> 12.2 JRootPane</p> <p> </p> <p> 12.2.1 RootPaneContainer接口</p> <p> </p> <p> 12.2.2 玻璃空格</p> <p align="center"><b>例12-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> private Component glassPane = new CustomGlassPane();</p> <p> public void init() {<br> JRadioButton rb = new JRadioButton();<br> JButton button = new JButton("show glass pane");<br> Container contentPane = getContentPane();</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(button);</p> <p> rb.setIcon(new ImageIcon("duke_standing.gif"));<br> rb.setRolloverIcon(new ImageIcon("duke_waving.gif"));</p> <p> setGlassPane(glassPane);<br> contentPane.add(rb);</p> <p> button.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> glassPane.setVisible(true);<br> }<br> });<br> }<br> }<br> class CustomGlassPane extends JPanel {<br> private JButton button;<br> private String displayString = "glass pane ... ";</p> <p> public CustomGlassPane() {<br> addMouseListener(new MouseAdapter() {<br> public void mousePressed(MouseEvent e) {<br> setVisible(false);<br> }<br> });<br> }<br> public void paintComponent(Graphics g) {<br> Dimension size = getSize();<br> FontMetrics fm = g.getFontMetrics();<br> int sw = fm.stringWidth(displayString);<br> int fh = fm.getHeight();</p> <p> g.setColor(Color.blue);</p> <p> for(int row=fh; row < size.height; row += fh)<br> for(int col=0; col < size.width; col += sw)<br> g.drawString(displayString, col, row);<br> }<br> }</p> <hr size="1" noshade> <p> 12.2.3 內容窗格</p> <p> </p> <p align="center"><b>例12-3 一個定制的內容窗格</b></p> <hr noshade size="1"> import java.awt.*;<br> import java.awt.event.*;<br> import javax.swing.*; <p>public class ContentPaneTest extends JApplet {<br> private JButton button = new JButton("show glass pane");</p> <p> public void init() {<br> setGlassPane(new CustomGlassPane(button));<br> setContentPane(new CustomContentPane(button));</p> <p> button.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> getGlassPane().setVisible(true);<br> }<br> });<br> }<br> }<br> class CustomContentPane extends JPanel {<br> private ImageIcon rain = new ImageIcon("rain.gif");<br> private ImageIcon punch = new ImageIcon("punch.gif");<br> private int rainw = rain.getIconWidth();<br> private int rainh = rain.getIconHeight();</p> <p> public CustomContentPane(JButton button) {<br> add(button);<br> add(new JLabel("I'm a JLabel in the Content Pane",<br> punch, SwingConstants.RIGHT));<br> }<br> public void paintComponent(Graphics g) {<br> Dimension size = getSize();</p> <p> for(int row=0; row < size.height; row += rainh)<br> for(int col=0; col < size.width; col += rainw)<br> rain.paintIcon(this,g,col,row);<br> }<br> }<br> class CustomGlassPane extends JPanel {<br> private JButton button;<br> private Point ulhc = new Point(20,20), last;<br> private String displayString = <br> "I'm on the glass pane - drag me around!";</p> <p> public CustomGlassPane(JButton b) {<br> button = b;</p> <p> setOpaque(false); <br> addMouseListener(new MouseAdapter() {<br> public void mousePressed(MouseEvent e) {<br> last = e.getPoint();<br> }<br> public void mouseReleased(MouseEvent e) {<br> setVisible(false);<br> }<br> });<br> addMouseMotionListener(new MouseMotionAdapter() {<br> public void mouseDragged(MouseEvent e) {<br> Point drag = e.getPoint();<br> ulhc.x += drag.x - last.x;<br> ulhc.y += drag.y - last.y;</p> <p> repaint();</p> <p> last.x = drag.x;<br> last.y = drag.y;<br> }<br> });<br> }<br> public void paintComponent(Graphics g) {<br> FontMetrics fm = g.getFontMetrics();<br> int sw = fm.stringWidth(displayString);<br> int sh = fm.getHeight();<br> int ascent = fm.getAscent();</p> <p> g.drawRect(ulhc.x, ulhc.y, sw + 10, sh + 10);<br> g.drawString(displayString, <br> ulhc.x + 5, ulhc.y + ascent + 5);<br> }<br> }</p> <hr size="1" noshade> <p> 12.2.4 JRootPane屬性</p> <p> </p> <p> 12.2.5 JRootPane事件</p> <p> </p> <p align="center"><b>例12-4 一個傳遞事件的玻璃窗格</b></p> <hr noshade size="1"> import java.awt.*;<br> import java.awt.event.*;<br> import java.io.*;<br> import javax.swing.*;<br> import javax.swing.text.*; <p>public class Test extends JApplet {<br> Component glassPane = new AnnotationPane();<br> JCheckBox annotations = new JCheckBox("annotations");</p> <p> public void init() {<br> createContainerHierarchy();<br> setupGlassPane();<br> }<br> private void createContainerHierarchy() {<br> Container contentPane = getContentPane();</p> <p> JPanel controlPanel = new JPanel();<br> JTextArea textArea = new JTextArea();<br> JScrollPane scrollPane = new JScrollPane(textArea);</p> <p> readFile(textArea.getDocument());</p> <p> controlPanel.add(annotations);</p> <p> contentPane.add(scrollPane, "Center"); // scroll pane<br> contentPane.add(controlPanel, "South"); // panel</p> <p> textArea.addMouseListener(new MouseAdapter() {<br> public void mouseEntered(MouseEvent e) {<br> System.out.println("enter");<br> }<br> });<br> }<br> private void setupGlassPane() {<br> setGlassPane(glassPane);<br> <br> annotations.addItemListener(new ItemListener() {<br> public void itemStateChanged(ItemEvent e) {<br> if(e.getStateChange() == ItemEvent.SELECTED)<br> glassPane.setVisible(true);<br> else<br> glassPane.setVisible(false);<br> }<br> });<br> }<br> private void readFile(Document doc) {<br> try {<br> Reader in = new FileReader("Test.java");<br> char[] buff = new char[4096];<br> int next;</p> <p> while ((next = in.read(buff, 0, buff.length)) != -1)<br> doc.insertString(<br> doc.getLength(), new String(buff, 0, next), null);<br> }<br> catch(Exception e) {<br> System.out.println("interruption");<br> }<br> }<br> }<br> class AnnotationPane extends JPanel {<br> private Icon annotations[] = {<br> new ImageIcon("annotation.gif"),<br> new ImageIcon("annotation_1.gif"),<br> new ImageIcon("annotation_2.gif")<br> };<br> public void paintComponent(Graphics g) {<br> annotations[0].paintIcon(this, g, 400, 50);<br> annotations[1].paintIcon(this, g, 10, 150);<br> annotations[2].paintIcon(this, g, 10, 265);<br> }<br> }</p> <hr size="1" noshade> <p> 12.2.6 JRootPane類總結</p> <p> </p> <p> 12.2.7 AWT兼容</p> <p> </p> <p> 12.3 JLayoutPane</p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -