📄 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 + -