📄 s07.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="s06.htm">上一页</a>][<a href="s08.htm">下一页</a>]</p> <p align="center"><b>第7章 插入式界面样式</b></p> <p> 插入式界面样式是建立在第3章“Swing组件体系结构”中讨论的组件体系结构基础之上的,即一个组件的界面样式是通过把一个特殊的UI代表插入这个组件来设置的。<br> Swing还提供了一个API来管理界面样式。界面样式的管理包括如下几个方面:定义界面样式、指定当前的界面样式和为当前的界面样式添加附加界面样式等。例如,图7-1示出了一个以不同界面样式运行的小应用程序(顺时针方向,从左上开始分别是Metal、Windows、Motif和Macintoch的界面样式)。这个小应用程序提供了一个组合框,用于为该小应用程序的所有组件选取界面样式。这个小应用程序借助Swing的UIManager类,根据在该组合框中的选择安装界面样式(注:未列出图7-1中示出的小应用程序的代码,例7-3给出了一个改变界面样式的例子)。 </p> <p> 7.1 插入式界面样式</p> <p> </p> <p> 7.1.1 界面样式结构</p> <p align="center"><b>例7-1 一个多行标签</b></p> <hr noshade size="1"> import javax.swing.*;<br> import javax.swing.plaf.BorderUIResource;<br> import java.awt.*;<br> import java.awt.event.*;<br> import java.util.*; <p>public class Test extends JApplet {<br> public void init() {<br> Container contentPane = getContentPane();<br> JLabel label = new JLabel(<br> "A long string that is high on verbiage and " +<br> "low on content.");</p> <p> MultilineLabel multilineLabel = new MultilineLabel(<br> "A long string that is high on verbiage and " +<br> "low on content."); </p> <p> contentPane.setLayout(new BorderLayout(2,10));<br> <br> contentPane.add(label, BorderLayout.NORTH);<br> contentPane.add(multilineLabel, BorderLayout.CENTER);<br> }<br> }<br> class MultilineLabel extends JTextArea {<br> public MultilineLabel(String s) {<br> super(s);<br> }<br> public void updateUI() {<br> super.updateUI();</p> <p> // turn on wrapping and disable editing and highlighting</p> <p> setLineWrap(true);<br> setWrapStyleWord(true);<br> setHighlighter(null);<br> setEditable(false);</p> <p> // Set the text area's border, colors and font to<br> // that of a label</p> <p> LookAndFeel.installBorder(this, "Label.border");</p> <p> LookAndFeel.installColorsAndFont(this, <br> "Label.background", <br> "Label.foreground",<br> "Label.font");<br> }<br> }</p> <hr size="1" noshade> <p> 7.1.2 界面样式缺省值</p> <p> </p> <p align="center"><b>例7-2 修改UI缺省值</b></p> <hr noshade size="1"> import java.awt.Color;<br> import javax.swing.*; <p>public class Test extends JApplet {<br> public void init() {<br> UIManager.put("Tree.background", Color.lightGray);<br> UIManager.put("Tree.textBackground", Color.lightGray);</p> <p> //ScrollBar.width is peculiar to Metal L&F<br> UIManager.put("ScrollBar.width", new Integer(25));<br> getContentPane().add(new JScrollPane(new JTree()));<br> }<br> }</p> <hr size="1" noshade> <p> 7.1.3 UI管理器</p> <p> </p> <p align="center"><b>例7-3 变换一个组件树的界面样式</b></p> <hr noshade size="1"> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*;<br> import java.util.*; <p>import com.sun.java.swing.plaf.motif.MotifLookAndFeel;<br> import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;<br> import javax.swing.plaf.metal.MetalLookAndFeel;</p> <p>import javax.swing.plaf.ColorUIResource;</p> <p>public class Test extends JApplet {<br> public void init() {<br> Container contentPane = getContentPane();</p> <p> contentPane.add(new ControlPanel(), BorderLayout.NORTH);<br> contentPane.add(new ComponentPanel(), <br> BorderLayout.CENTER);<br> }<br> class ComponentPanel extends JPanel {<br> public ComponentPanel() {<br> JList list;<br> JScrollBar sb;</p> <p> setBorder(<br> BorderFactory.createTitledBorder("Components"));</p> <p> add(new JCheckBox("check Me"));<br> add(new JRadioButton("radio button"));<br> add(new JButton("button"));<br> add(new JLabel("A Label:"));<br> add(new JTextField("text field"));<br> add(new JScrollPane(list = new JList(new Object[] {<br> "item 1", "item 2", "item 3",<br> "item 4", "item 5", "item 6",<br> "item 7", "item 8", "item 9",<br> })));<br> add(sb = new JScrollBar(SwingConstants.HORIZONTAL));<br> sb.setPreferredSize(new Dimension(150,17));</p> <p> add(sb = new JScrollBar(SwingConstants.VERTICAL));<br> sb.setPreferredSize(new Dimension(20,175));</p> <p> list.setVisibleRowCount(5);<br> }<br> }<br> class ControlPanel extends JPanel {<br> JCheckBox checkBox = new JCheckBox("UIResource");<br> JRadioButton motifButton = new JRadioButton("Motif"),<br> windowsButton = new JRadioButton("Windows"),<br> metalButton = new JRadioButton("Metal");</p> <p> public ControlPanel() {<br> ActionListener listener = new RadioHandler();<br> ButtonGroup group = new ButtonGroup();</p> <p> group.add(motifButton);<br> group.add(windowsButton);<br> group.add(metalButton);</p> <p> motifButton.addActionListener(listener);<br> windowsButton.addActionListener(listener);<br> metalButton.addActionListener(listener);</p> <p> add(motifButton);<br> add(windowsButton);<br> add(metalButton);<br> }<br> class RadioHandler implements ActionListener {<br> public void actionPerformed(ActionEvent e) {<br> JRadioButton src = (JRadioButton)e.getSource();</p> <p> try {<br> if(src == motifButton)<br> UIManager.setLookAndFeel(<br> "com.sun.java.swing.plaf." +<br> "motif.MotifLookAndFeel");</p> <p> else if(src == windowsButton)<br> UIManager.setLookAndFeel(<br> "com.sun.java.swing.plaf." +<br> "windows.WindowsLookAndFeel");</p> <p> else if(src == metalButton)<br> UIManager.setLookAndFeel(<br> "javax.swing.plaf.metal." +<br> "MetalLookAndFeel");<br> }<br> catch(Exception ex) {<br> ex.printStackTrace();<br> }<br> SwingUtilities.updateComponentTreeUI(<br> getContentPane());<br> }<br> }<br> }<br> }</p> <hr size="1" noshade> <p> 7.1.4 UI资源</p> <p> </p> <p align="center"><b>例7-4 UI资源</b></p> <hr noshade size="1"> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*;<br> import java.util.*; <p>import com.sun.java.swing.plaf.motif.MotifLookAndFeel;<br> import javax.swing.plaf.metal.MetalLookAndFeel;</p> <p>import javax.swing.plaf.ColorUIResource;</p> <p>public class Test extends JApplet {<br> private JButton button = new JButton("App Resource");</p> <p> public void init() {<br> Container contentPane = getContentPane();</p> <p> contentPane.add(new ControlPanel(), BorderLayout.NORTH);<br> contentPane.add(button, BorderLayout.CENTER);<br> }<br> class ControlPanel extends JPanel {<br> boolean resource = false;<br> JButton colorSetButton = new JButton("Set Color ...");<br> JCheckBox checkBox = new JCheckBox("UIResource");<br> JRadioButton motifButton = new JRadioButton("Motif"),<br> metalButton = new JRadioButton("Metal");</p> <p> public ControlPanel() {<br> ActionListener listener = new RadioHandler();<br> ButtonGroup group = new ButtonGroup();</p> <p> group.add(motifButton);<br> group.add(metalButton);</p> <p> motifButton.addActionListener(listener);<br> metalButton.addActionListener(listener);</p> <p> metalButton.setSelected(true);</p> <p> add(motifButton);<br> add(metalButton);<br> add(Box.createHorizontalStrut(25));<br> add(colorSetButton);<br> add(checkBox);</p> <p> Font buttonFont = button.getFont();<br> button.setFont(new Font(buttonFont.getFamily(),<br> Font.ITALIC, 56));</p> <p> colorSetButton.addActionListener(new ActionListener(){<br> public void actionPerformed(ActionEvent e) {<br> updateButtonColor();<br> }<br> });<br> checkBox.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> resource = checkBox.isSelected();<br> updateButtonColor();<br> }<br> });<br> }<br> private void updateButtonColor() {<br> Color c = JColorChooser.showDialog(<br> getContentPane(), // parent component<br> "Choose a Color", // title<br> getBackground()); // initial color</p> <p> if(resource) {<br> button.setText("UI Resource");<br> button.setForeground(new ColorUIResource(c));<br> }<br> else {<br> button.setText("App Resource");<br> button.setForeground(c);<br> }<br> }<br> class RadioHandler implements ActionListener {<br> public void actionPerformed(ActionEvent e) {<br> JRadioButton src = (JRadioButton)e.getSource();</p> <p> try {<br> if(src == motifButton)<br> UIManager.setLookAndFeel(<br> "com.sun.java.swing.plaf." +<br> "motif.MotifLookAndFeel");<br> else if(src == metalButton)<br> UIManager.setLookAndFeel(<br> "javax.swing.plaf.metal." +<br> "MetalLookAndFeel");<br> }<br> catch(Exception ex) {<br> ex.printStackTrace();<br> }<br> SwingUtilities.updateComponentTreeUI(<br> getContentPane());<br> }<br> }<br> }<br> }</p> <hr size="1" noshade> <p> 7.2 Java界面样式</p> <p> </p> <p align="center"><b>例7-5 Metal客户属性</b></p> <hr noshade size="1"> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*;<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -