📄 s12.htm
字号:
<p> </p> <p> 12.3.1 回顾轻量组件的层序</p> <p> </p> <p align="center"><b>例12-5 添加到一个内容窗格中的按钮的程序</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> Container cp = getContentPane();</p> <p> private final Component[] comps = {<br> new JButton(), new JButton(), <br> new JButton(), new JButton(), <br> new JButton(), new JButton(), <br> };<br> public void init() {<br> cp.setLayout(null);</p> <p> for(int i=0; i < comps.length; ++i) {<br> AbstractButton button = (AbstractButton)comps[i];<br> cp.add(button);</p> <p> String t = "Button #";</p> <p> t += i + " Index: " + getIndexOf(button);</p> <p> button.setText(t);<br> button.setBounds(i*50, i*50, 350, 75);<br> System.out.println("Adding: " + button.getText());<br> }<br> }<br> private int getIndexOf(Component button) {<br> int ncomponents = cp.getComponentCount();</p> <p> for(int i=0; i < ncomponents; ++i) {<br> Component c = cp.getComponent(i);<br> if(button == c)<br> return i;<br> }<br> return -1;<br> }<br> }</p> <hr size="1" noshade> <p align="center"> </p> <p> 12.3.2 为组件分配器</p> <p> </p> <p align="center"><b>例12-6 所包含在一个分层窗格中的组件分配到层中</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 JLayeredPane lp = new JLayeredPane();</p> <p> private Integer[] layers = {<br> JLayeredPane.FRAME_CONTENT_LAYER,<br> JLayeredPane.DEFAULT_LAYER,<br> JLayeredPane.PALETTE_LAYER,<br> JLayeredPane.MODAL_LAYER,<br> JLayeredPane.POPUP_LAYER,<br> JLayeredPane.DRAG_LAYER,<br> };<br> private final Component[] comps = {<br> new JButton("Frame Content"), new JButton("Default"), <br> new JButton("Palette"), new JButton("Modal"), <br> new JButton("Popup"), new JButton("Drag"), <br> };<br> public void init() {<br> setContentPane(lp);<br> lp.setLayout(null);</p> <p> for(int i=0; i < comps.length; ++i) {<br> AbstractButton button = (AbstractButton)comps[i];</p> <p> System.out.println("Adding: " + button.getText());</p> <p> lp.setLayer(button, layers[i].intValue());<br> lp.add(button);<br> }<br> for(int i=0; i < comps.length; ++i) {<br> AbstractButton button = (AbstractButton)comps[i];<br> String t = button.getText();<br> String replacement = new String("Layer: ");</p> <p> replacement += t + "(" + lp.getLayer(button) + "),";<br> replacement += " Index: " + lp.getIndexOf(button);</p> <p> button.setText(replacement);<br> button.setBounds(i*50, i*50, 350, 75); <br> }<br> }<br> }</p> <hr size="1" noshade> <p> </p> <p> 12.3.3 指定同一层中组件的位置</p> <p> </p> <p align="center"><b>例12-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> private JLayeredPane lp = new JLayeredPane();</p> <p> private Integer[] layers = {<br> JLayeredPane.FRAME_CONTENT_LAYER,<br> JLayeredPane.DEFAULT_LAYER,<br> JLayeredPane.DEFAULT_LAYER,<br> JLayeredPane.DEFAULT_LAYER,<br> JLayeredPane.PALETTE_LAYER,<br> JLayeredPane.MODAL_LAYER,<br> JLayeredPane.POPUP_LAYER,<br> JLayeredPane.DRAG_LAYER,<br> };<br> private final Component[] comps = {<br> new JButton("Frame Content"), new JButton("Default"), <br> new JButton("default 1"), new JButton("default 2"), <br> new JButton("Palette"), new JButton("Modal"), <br> new JButton("Popup"), new JButton("Drag"), <br> };<br> public void init() {<br> setContentPane(lp);<br> lp.setLayout(null);</p> <p> for(int i=0; i < comps.length; ++i) {<br> AbstractButton button = (AbstractButton)comps[i];</p> <p> lp.setLayer(button, layers[i].intValue());<br> lp.add(button);<br> }<br> for(int i=0; i < comps.length; ++i) {<br> AbstractButton button = (AbstractButton)comps[i];<br> String t = button.getText();<br> String replacement = new String("Layer: ");</p> <p> replacement += t + "(" + lp.getLayer(button) + "),";<br> replacement += " Index: " + lp.getIndexOf(button);<br> replacement += " Position: " + <br> lp.getPosition(button);</p> <p> button.setText(replacement);<br> button.setBounds(i*50, i*50, 350, 75); <br> }<br> }<br> }</p> <hr size="1" noshade> <p align="center"><b>例12-8 显式地设置同层中组件的位置</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 JLayeredPane lp = new JLayeredPane();</p> <p> private Integer[] layers = {<br> JLayeredPane.FRAME_CONTENT_LAYER,<br> JLayeredPane.DEFAULT_LAYER,<br> JLayeredPane.DEFAULT_LAYER,<br> JLayeredPane.DEFAULT_LAYER,<br> JLayeredPane.PALETTE_LAYER,<br> JLayeredPane.MODAL_LAYER,<br> JLayeredPane.POPUP_LAYER,<br> JLayeredPane.DRAG_LAYER,<br> };<br> private final Component[] comps = {<br> new JButton("Frame Content"), new JButton("Default"), <br> new JButton("default 1"), new JButton("default 2"), <br> new JButton("Palette"), new JButton("Modal"), <br> new JButton("Popup"), new JButton("Drag"), <br> };<br> public void init() {<br> setContentPane(lp);<br> lp.setLayout(null);</p> <p> for(int i=0; i < comps.length; ++i) {<br> AbstractButton button = (AbstractButton)comps[i];<br> String t = button.getText();</p> <p> lp.setLayer(button, layers[i].intValue());<br> lp.add(button);<br> }<br> for(int i=0; i < comps.length; ++i) {<br> AbstractButton button = (AbstractButton)comps[i];<br> String t = button.getText();<br> String replacement = new String("Layer: ");</p> <p> if(t.equals("Default"))<br> lp.setPosition(button, 2); <br> else if(t.equals("default 2"))<br> lp.setPosition(button, 0); </p> <p> replacement += t + "(" + lp.getLayer(button) + "),";<br> replacement += " Index: " + lp.getIndexOf(button);<br> replacement += " Position: " + <br> lp.getPosition(button);</p> <p> button.setText(replacement);<br> button.setBounds(i*50, i*50, 350, 75); <br> }<br> }<br> }</p> <hr size="1" noshade> <p> </p> <p> </p> <p> 12.3.4 使用拖动层</p> <p> </p> <p align="center"><b>例12-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> setContentPane(new CustomContentPane());<br> }<br> }<br> class CustomContentPane extends JLayeredPane {<br> private ImageIcon rain = new ImageIcon("rain.gif");<br> private ImageIcon punch = new ImageIcon("punch.gif");<br> private ImageIcon skelly = new ImageIcon("skelly.gif");<br> private int rainw = rain.getIconWidth();<br> private int rainh = rain.getIconHeight();</p> <p> private JLabel[] labels = { <br> new JLabel("I stay put", punch, SwingConstants.RIGHT),<br> new JLabel("Drag me around!", <br> skelly, SwingConstants.RIGHT),<br> };</p> <p> public CustomContentPane() {<br> Dragger listener = new Dragger();<br> JCheckBox onDragLayer = new JCheckBox("Drag Layer");</p> <p> // JLayeredPane has a null layout by default<br> setLayout(new FlowLayout());</p> <p> onDragLayer.setOpaque(false);</p> <p> add(onDragLayer);<br> add(labels[0]);<br> add(labels[1]);</p> <p> labels[1].addMouseMotionListener(listener);<br> labels[1].addMouseListener(listener);</p> <p> setLabelText();</p> <p> onDragLayer.addItemListener(new ItemListener() {<br> public void itemStateChanged(ItemEvent e) {<br> if(e.getStateChange() == ItemEvent.SELECTED) {<br> setLayer(labels[1], <br> JLayeredPane.DRAG_LAYER.intValue());<br> }<br> else {<br> setLayer(labels[1], <br> JLayeredPane.DEFAULT_LAYER.intValue());<br> <br> }<br> setLabelText();<br> validate();<br> }<br> });<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> private void setLabelText() {<br> for(int i=0; i < labels.length; ++i) {<br> JLabel label = labels[i];<br> String t = new String("Layer: ");</p> <p> t += "(" + getLayer(label) + "),";<br> t += " Index: " + getIndexOf(label);</p> <p> label.setText(t);<br> }<br> }<br> }<br> class Dragger extends MouseAdapter <br> implements MouseMotionListener {<br> Point press = new Point();<br> boolean dragging = false;</p> <p> public void mousePressed(MouseEvent event) {<br> press.x = event.getX();<br> press.y = event.getY();<br> dragging = true;<br> }<br> public boolean isDragging() {<br> return dragging;<br> }<br> public void mouseReleased(MouseEvent event) {<br> dragging = false;<br> }<br> public void mouseClicked(MouseEvent event) {<br> dragging = false;<br> }<br> public void mouseMoved(MouseEvent event) {<br> // don't care<br> }<br> public void mouseDragged(MouseEvent event) {<br> Component c = (Component)event.getSource();</p> <p> if(dragging) {<br> Point loc = c.getLocation();<br> Point pt = new Point();<br> pt.x = event.getX() + loc.x - press.x;<br> pt.y = event.getY() + loc.y - press.y;<br> c.setLocation(pt.x, pt.y);<br> c.getParent().repaint();<br> }<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -