📄 s04.htm
字号:
<p> </p> <p align="center"><b>例4-21 用客户属性把一个动态目标分配给一个按钮</b></p> <hr size="1" noshade> import javax.swing.*;<br> import java.util.*;<br> import java.awt.*;<br> import java.awt.event.*;<br> import java.beans.*; <p>public class ClientPropertiesTest extends JApplet {<br> JButton button = new JButton("toggle target color");<br> JComboBox targetCombo = new JComboBox();<br> JPanel[] targets = { new JPanel(),<br> new JPanel(),<br> new JPanel() };<br> public void init() {<br> Container contentPane = getContentPane();<br> Dimension targetPreferredSize = new Dimension(100,100);<br> JPanel targetPanel = new JPanel();</p> <p> for(int i=0; i < targets.length; ++i) {<br> targets[i].setBackground(Color.blue);<br> targets[i].setPreferredSize(targetPreferredSize);<br> targetPanel.add(targets[i]);</p> <p> }<br> targetCombo.addItem("left");<br> targetCombo.addItem("center");<br> targetCombo.addItem("right");</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(button);<br> contentPane.add(targetCombo);<br> contentPane.add(targetPanel);</p> <p> button.putClientProperty("target", targets[0]);</p> <p> button.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> Component c = <br> (Component)button.getClientProperty("target");</p> <p> if(c != null) {<br> Color bg = c.getBackground();</p> <p> c.setBackground(bg == Color.blue ?<br> Color.red : Color.blue);</p> <p> c.repaint();<br> }<br> }<br> });<br> targetCombo.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> button.putClientProperty(<br> "target", <br> targets[targetCombo.getSelectedIndex()]);<br> }<br> });<br> button.addPropertyChangeListener(<br> new PropertyChangeListener() {<br> public void propertyChange(PropertyChangeEvent e) {<br> if(e.getPropertyName().equals("target")) {<br> showStatus(<br> (String)targetCombo.getSelectedItem() + <br> " panel set as target");<br> }<br> }<br> });<br> }<br> public static void main(String args[]) {<br> final JFrame f = new JFrame();<br> JApplet applet = new ClientPropertiesTest();</p> <p> applet.init();</p> <p> f.setContentPane(applet.getContentPane());<br> f.setBounds(100,100,300,250);<br> f.setTitle("ClientPropertiesTest");<br> f.setVisible(true);</p> <p> f.addWindowListener(new WindowAdapter() {<br> public void windowClosing(WindowEvent e) {<br> f.dispose();<br> System.exit(0);<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p> 4.10 焦点管理</p> <p> </p> <p> 4.10.1 JComponent的焦点属性</p> <p> </p> <p align="center"><b>例4-22 为Swing组件指定焦点属性</b></p> <hr size="1" noshade> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class Test extends JApplet {<br> private JButton button_1 = new NotFocusTraversableButton(),<br> button_2 = new ButtonThatManagesFocus(),<br> button_3 = new JButton("regular button"),<br> button_4 = new JButton("regular button"),<br> button_5 = new JButton("request focus disabled"),<br> button_6 = new JButton(<br> "next focusable component set to Manages Focus button");</p> <p> public void init() {<br> Container contentPane = getContentPane();<br> FocusCycleRootPanel panel = new FocusCycleRootPanel();</p> <p> button_5.setRequestFocusEnabled(false);<br> button_6.setNextFocusableComponent(button_2);</p> <p> panel.add(button_3);<br> panel.add(button_4);<br> panel.add(button_5);</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(button_1);<br> contentPane.add(button_2);<br> contentPane.add(panel);<br> contentPane.add(button_6);<br> }<br> }<br> class ButtonThatManagesFocus extends JButton {<br> public ButtonThatManagesFocus() {<br> super("Manages Focus"); <br> }<br> public boolean isManagingFocus() {<br> return true;<br> }<br> public void processComponentKeyEvent(KeyEvent e) {<br> System.out.println(e);<br> }<br> }<br> class NotFocusTraversableButton extends JButton {<br> public NotFocusTraversableButton() {<br> super("Not Focus Traversable"); <br> }<br> public boolean isFocusTraversable() {<br> return false;<br> }<br> }<br> class FocusCycleRootPanel extends JPanel {<br> public FocusCycleRootPanel() {<br> setBorder(BorderFactory.createTitledBorder(<br> "FocusCycleRoot Panel"));<br> }<br> public boolean isFocusCycleRoot() {<br> return true;<br> }<br> }</p> <hr size="1" noshade> <p> 4.10.2 焦点管理器</p> <p> </p> <p align="center"><b>例4-23 实现一个定制的焦点管理器</b></p> <hr size="1" noshade> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class Test extends JApplet {<br> private JButton button_1 = new JButton("button one"),<br> button_2 = new JButton("button two"),<br> button_3 = new JButton("button three"),<br> button_4 = new JButton("button four"),<br> button_5 = new JButton("button five"),<br> button_6 = new JButton("button six");</p> <p> public void init() {<br> Container contentPane = getContentPane();</p> <p> javax.swing.FocusManager.setCurrentManager(<br> new CustomFocusManager());</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(button_1);<br> contentPane.add(button_2);<br> contentPane.add(button_3);<br> contentPane.add(button_4);<br> contentPane.add(button_5);<br> contentPane.add(button_6);<br> }<br> }<br> class CustomFocusManager extends DefaultFocusManager {<br> public boolean compareTabOrder(Component a, Component b) {<br> Point location_a = a.getLocation(),<br> location_b = b.getLocation();</p> <p> int ax = location_a.x, ay = location_a.y;<br> int bx = location_b.x, by = location_b.y;</p> <p> if(Math.abs(ay - by) < 10) {<br> return (bx < ax);<br> }<br> return (ay > by); <br> }<br> }</p> <hr size="1" noshade> <p> 4.11 支持可访问性</p> <p> </p> <p align="center"><b>例4-24 获得可访问性信息</b></p> <hr size="1" noshade> import javax.swing.*;<br> import javax.accessibility.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class Test extends JApplet {<br> public void init() {<br> Container contentPane = getContentPane();<br> JLabel label = new JLabel("First Name:");<br> JButton showButton = new JButton(<br> "show accessible information");</p> <p> final JTextField field = new JTextField(15);</p> <p> AccessibleContext fieldContext = <br> field.getAccessibleContext();</p> <p> fieldContext.setAccessibleName("First Name");<br> fieldContext.setAccessibleDescription(<br> "Enter your first name");</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(showButton);<br> contentPane.add(label);<br> contentPane.add(field);</p> <p> showButton.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> AccessibleContext context;<br> AccessibleRole role;</p> <p> context = field.getAccessibleContext();<br> role = context.getAccessibleRole();</p> <p> System.out.print("Accessible Role: ");<br> System.out.println(<br> context.getAccessibleRole());</p> <p> System.out.print("Accessible Description: ");<br> System.out.println(<br> context.getAccessibleDescription());</p> <p> System.out.print("Accessible Name: ");<br> System.out.println(<br> context.getAccessibleName());<br> <br> }<br> });</p> <p> }<br> }</p> <hr size="1" noshade> <p> 4.12 本章回顾</p> <p> </p> <p>[<a href="index.html" target="_self">目录</a>][<a href="s03.htm">上一页</a>][<a href="s05.htm">下一页</a>](飒龙收藏/2002.5.18) </p> </td> </tr> </tbody> </table> </td> </tr></tbody></table><script language="javascript">bottomprint()</script></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -