第7章+插入式界面样式.doc

上传人:豆**** 文档编号:17676026 上传时间:2022-05-25 格式:DOC 页数:14 大小:223.50KB
返回 下载 相关 举报
第7章+插入式界面样式.doc_第1页
第1页 / 共14页
第7章+插入式界面样式.doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《第7章+插入式界面样式.doc》由会员分享,可在线阅读,更多相关《第7章+插入式界面样式.doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流第7章+插入式界面样式.精品文档.第7章 插入式界面样式插入式界面样式是建立在第3章“Swing组件体系结构”中讨论的组件体系结构基础之上的,即一个组件的界面样式是通过把一个特殊的UI代表插入这个组件来设置的。Swing还提供了一个API来管理界面样式。界面样式的管理包括如下几个方面:定义界面样式、指定当前的界面样式和为当前的界面样式添加附加界面样式等。例如,图7-1示出了一个以不同界面样式运行的小应用程序(顺时针方向,从左上开始分别是Metal、Windows、Motif和Macintoch的界面样式)。这个小应用程序提供了一个组合框,用于

2、为该小应用程序的所有组件选取界面样式。这个小应用程序借助Swing的UIManager类,根据在该组合框中的选择安装界面样式(注:未列出图7-1中示出的小应用程序的代码,例7-3给出了一个改变界面样式的例子)。 7.1 插入式界面样式7.1.1 界面样式结构例7-1 一个多行标签import javax.swing.*;import javax.swing.plaf.BorderUIResource;import java.awt.*;import java.awt.event.*;import java.util.*; public class Test extends JApplet pu

3、blic void init() Container contentPane = getContentPane();JLabel label = new JLabel(A long string that is high on verbiage and +low on content.);MultilineLabel multilineLabel = new MultilineLabel(A long string that is high on verbiage and +low on content.); contentPane.setLayout(new BorderLayout(2,1

4、0);contentPane.add(label, BorderLayout.NORTH);contentPane.add(multilineLabel, BorderLayout.CENTER);class MultilineLabel extends JTextArea public MultilineLabel(String s) super(s);public void updateUI() super.updateUI();/ turn on wrapping and disable editing and highlightingsetLineWrap(true);setWrapS

5、tyleWord(true);setHighlighter(null);setEditable(false);/ Set the text areas border, colors and font to/ that of a labelLookAndFeel.installBorder(this, Label.border);LookAndFeel.installColorsAndFont(this, Label.background, Label.foreground,Label.font);7.1.2 界面样式缺省值例7-2 修改UI缺省值import java.awt.Color;im

6、port javax.swing.*; public class Test extends JApplet public void init() UIManager.put(Tree.background, Color.lightGray);UIManager.put(Tree.textBackground, Color.lightGray);/ScrollBar.width is peculiar to Metal L&FUIManager.put(ScrollBar.width, new Integer(25);getContentPane().add(new JScrollPane(ne

7、w JTree();7.1.3 UI管理器例7-3 变换一个组件树的界面样式import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*; import com.sun.java.swing.plaf.motif.MotifLookAndFeel;import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;import javax.swing.plaf.metal.MetalLookAndFeel;import javax.swing.p

8、laf.ColorUIResource;public class Test extends JApplet public void init() Container contentPane = getContentPane();contentPane.add(new ControlPanel(), BorderLayout.NORTH);contentPane.add(new ComponentPanel(), BorderLayout.CENTER);class ComponentPanel extends JPanel public ComponentPanel() JList list;

9、JScrollBar sb;setBorder(BorderFactory.createTitledBorder(Components);add(new JCheckBox(check Me);add(new JRadioButton(radio button);add(new JButton(button);add(new JLabel(A Label:);add(new JTextField(text field);add(new JScrollPane(list = new JList(new Object item 1, item 2, item 3,item 4, item 5, i

10、tem 6,item 7, item 8, item 9,);add(sb = new JScrollBar(SwingConstants.HORIZONTAL);sb.setPreferredSize(new Dimension(150,17);add(sb = new JScrollBar(SwingConstants.VERTICAL);sb.setPreferredSize(new Dimension(20,175);list.setVisibleRowCount(5);class ControlPanel extends JPanel JCheckBox checkBox = new

11、 JCheckBox(UIResource);JRadioButton motifButton = new JRadioButton(Motif),windowsButton = new JRadioButton(Windows),metalButton = new JRadioButton(Metal);public ControlPanel() ActionListener listener = new RadioHandler();ButtonGroup group = new ButtonGroup();group.add(motifButton);group.add(windowsB

12、utton);group.add(metalButton);motifButton.addActionListener(listener);windowsButton.addActionListener(listener);metalButton.addActionListener(listener);add(motifButton);add(windowsButton);add(metalButton);class RadioHandler implements ActionListener public void actionPerformed(ActionEvent e) JRadioB

13、utton src = (JRadioButton)e.getSource();try if(src = motifButton)UIManager.setLookAndFeel(com.sun.java.swing.plaf. +motif.MotifLookAndFeel);else if(src = windowsButton)UIManager.setLookAndFeel(com.sun.java.swing.plaf. +windows.WindowsLookAndFeel);else if(src = metalButton)UIManager.setLookAndFeel(ja

14、vax.swing.plaf.metal. +MetalLookAndFeel);catch(Exception ex) ex.printStackTrace();SwingUtilities.updateComponentTreeUI(getContentPane();7.1.4 UI资源例7-4 UI资源import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*; import com.sun.java.swing.plaf.motif.MotifLookAndFeel;import j

15、avax.swing.plaf.metal.MetalLookAndFeel;import javax.swing.plaf.ColorUIResource;public class Test extends JApplet private JButton button = new JButton(App Resource);public void init() Container contentPane = getContentPane();contentPane.add(new ControlPanel(), BorderLayout.NORTH);contentPane.add(butt

16、on, BorderLayout.CENTER);class ControlPanel extends JPanel boolean resource = false;JButton colorSetButton = new JButton(Set Color .);JCheckBox checkBox = new JCheckBox(UIResource);JRadioButton motifButton = new JRadioButton(Motif),metalButton = new JRadioButton(Metal);public ControlPanel() ActionLi

17、stener listener = new RadioHandler();ButtonGroup group = new ButtonGroup();group.add(motifButton);group.add(metalButton);motifButton.addActionListener(listener);metalButton.addActionListener(listener);metalButton.setSelected(true);add(motifButton);add(metalButton);add(Box.createHorizontalStrut(25);a

18、dd(colorSetButton);add(checkBox);Font buttonFont = button.getFont();button.setFont(new Font(buttonFont.getFamily(),Font.ITALIC, 56);colorSetButton.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) updateButtonColor(););checkBox.addActionListener(new ActionListener() pu

19、blic void actionPerformed(ActionEvent e) resource = checkBox.isSelected();updateButtonColor(););private void updateButtonColor() Color c = JColorChooser.showDialog(getContentPane(), / parent componentChoose a Color, / titlegetBackground(); / initial colorif(resource) button.setText(UI Resource);butt

20、on.setForeground(new ColorUIResource(c);else button.setText(App Resource);button.setForeground(c);class RadioHandler implements ActionListener public void actionPerformed(ActionEvent e) JRadioButton src = (JRadioButton)e.getSource();try if(src = motifButton)UIManager.setLookAndFeel(com.sun.java.swin

21、g.plaf. +motif.MotifLookAndFeel);else if(src = metalButton)UIManager.setLookAndFeel(javax.swing.plaf.metal. +MetalLookAndFeel);catch(Exception ex) ex.printStackTrace();SwingUtilities.updateComponentTreeUI(getContentPane();7.2 Java界面样式例7-5 Metal客户属性import javax.swing.*;import java.awt.*;import java.a

22、wt.event.*;import java.util.*; public class Test extends JApplet JDesktopPane desktopPane = new JDesktopPane();JInternalFrame jif = new JInternalFrame(Internal Frame , / titletrue, / resizabletrue, / closabletrue, / maximizabletrue); / iconifiableJScrollBar scrollbar = new JScrollBar();JSlider slide

23、r = new JSlider();JToolBar toolbar = new JToolBar();JTree tree = new JTree();public void init() Container contentPane = getContentPane();jif.setPreferredSize(new Dimension(550, 450);jif.getContentPane().setLayout(new FlowLayout();jif.getContentPane().add(new ComponentPanel();desktopPane.setLayout(ne

24、w FlowLayout();desktopPane.add(jif);contentPane.add(new ControlPanel(), BorderLayout.NORTH);contentPane.add(desktopPane, BorderLayout.CENTER);class ComponentPanel extends JPanel public ComponentPanel() JPanel panel = new JPanel();setLayout(new BorderLayout();add(toolbar, BorderLayout.NORTH);add(pane

25、l, BorderLayout.CENTER);panel.add(scrollbar);panel.add(slider);panel.add(new JScrollPane(tree);tree.setPreferredSize(new Dimension(200,100);toolbar.add(new JButton(button);class ControlPanel extends JPanel JCheckBox rollover = new JCheckBox(JToolBar.rollover);JCheckBox palette = new JCheckBox(JInter

26、nalFrame.palette);JCheckBox filled = new JCheckBox(JSlider.isFilled);JCheckBox freeStanding = new JCheckBox( JScrollBar.freeStanding);JRadioButton none = new JRadioButton(none);JRadioButton horizontal = new JRadioButton(horizontal);JRadioButton angled = new JRadioButton(angled);public ControlPanel()

27、 ActionListener checkBoxListener = new CheckBoxListener();ActionListener radioButtonListener = new RadioButtonListener();palette.addActionListener(checkBoxListener);filled.addActionListener(checkBoxListener);rollover.addActionListener(checkBoxListener);freeStanding.addActionListener(checkBoxListener

28、);none.addActionListener(radioButtonListener);horizontal.addActionListener(radioButtonListener);angled.addActionListener(radioButtonListener);ButtonGroup group = new ButtonGroup();group.add(none);group.add(horizontal);group.add(filled);none.setSelected(true);freeStanding.setSelected(true);add(palett

29、e);add(filled);add(rollover);add(freeStanding);add(Box.createHorizontalStrut(10);add(new JLabel(Tree: );add(none);add(horizontal);add(angled);class RadioButtonListener implements ActionListener public void actionPerformed(ActionEvent e) JRadioButton rb = (JRadioButton)e.getSource();if(rb = none) tre

30、e.putClientProperty(JTree.lineStyle, None);if(rb = horizontal) tree.putClientProperty(JTree.lineStyle, Horizontal);if(rb = angled) tree.putClientProperty(JTree.lineStyle, Angled);tree.repaint();class CheckBoxListener implements ActionListener public void actionPerformed(ActionEvent e) JCheckBox cb =

31、 (JCheckBox)e.getSource();if(cb = palette) palette.putClientProperty(JInternalFrame.isPalette, new Boolean(cb.isSelected();jif.revalidate();else if(cb = filled) slider.putClientProperty(JSlider.isFilled, new Boolean(cb.isSelected();slider.repaint();else if(cb = rollover) toolbar.putClientProperty(JT

32、oolBar.isRollover, new Boolean(cb.isSelected();toolbar.repaint();else if(cb = freeStanding) scrollbar.putClientProperty(JScrollBar.isFreeStanding, new Boolean(cb.isSelected();scrollbar.repaint();7.2.1 客户属性7.2.2 主题例7-6 一个简单的定制主题import java.awt.*;import javax.swing.*;import javax.swing.plaf.*;import j

33、avax.swing.plaf.metal.*;import javax.swing.plaf.*; public class Test extends JApplet public void init() Container contentPane = getContentPane();contentPane.setLayout(new FlowLayout();setMetalTheme(new ExperimentalTheme();contentPane.add(new JButton(button);contentPane.add(new JCheckBox(check me);pr

34、ivate void setMetalTheme(MetalTheme theme) MetalLookAndFeel.setCurrentTheme(new ExperimentalTheme();/ Metal Look and Feel must be (re)loaded for the/ new theme to take effect .try UIManager.setLookAndFeel(javax.swing.plaf.metal.MetalLookAndFeel);catch(IllegalAccessException e1) catch(UnsupportedLook

35、AndFeelException e2) catch(InstantiationException e3) catch(ClassNotFoundException e4) class ExperimentalTheme extends DefaultMetalTheme public FontUIResource getControlTextFont() return new FontUIResource(SanSerif, Font.BOLD + Font.ITALIC, 24);例7-7 安装一个附加界面样式import java.awt.*;import javax.swing.*;

36、public class Test extends JApplet public void init() UIManager.addAuxiliaryLookAndFeel( new ExampleAuxiliaryLookAndFeel();Container contentPane = getContentPane();JButton button = new JButton(button);contentPane.setLayout(new FlowLayout();contentPane.add(button);例7-8 附加界面样式的例子import java.awt.*;impor

37、t javax.swing.*; public class ExampleAuxiliaryLookAndFeel extends LookAndFeel public String getDescription()return example auxiliary look and feel;public String getID() return example;public String getName() return example auxiliary; public boolean isNativeLookAndFeel() return false;public boolean i

38、sSupportedLookAndFeel() return true;public UIDefaults getDefaults() UIDefaults table = new UIDefaults();Object uiDefaults = ButtonUI, AuxiliaryButtonUI;table.putDefaults(uiDefaults);return table;例7-9 一个附加UIimport java.awt.*;import java.awt.event.*;import javax.accessibility.*;import javax.swing.*;im

39、port javax.swing.plaf.*; public class AuxiliaryButtonUI extends ComponentUI private static ComponentUI cui = new AuxiliaryButtonUI();private static AuxiliaryButtonMouseListener ml = new AuxiliaryButtonMouseListener();/ must be implementedpublic static ComponentUI createUI(JComponent c) return cui;pu

40、blic void installUI(JComponent c) c.addMouseListener(ml);public void uninstallUI(JComponent c) c.removeMouseListener(ml);public void update(Graphics g, JComponent c) / dont want ComponentUI default behavior, which is/ to clear the backgroundclass AuxiliaryButtonMouseListener extends MouseAdapter public void mouseEntered(MouseEvent e) JComponent c = (JComponent)e.getSource();AccessibleContext ac = c.getAccessibleContext();String role = ac.getAccessibleRole().toString();String name = ac.getAccessibleName();System.out.println(mouse entered component of type +role + named + name);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁