《Java 2 图形设计卷Ⅱ- SWING》第8章 标签与按钮

简介: 第8章 标签与按钮  Swing的标签和按钮分别用JLabel和JButton类表示,它们是能够显示文本或图标的简单组件。缺省时,标签没有边框,可以显示一个字符串,一个图标或同时显示字符串和图标。

8章 标签与按钮

  Swing的标签和按钮分别用JLabelJButton类表示,它们是能够显示文本或图标的简单组件。缺省时,标签没有边框,可以显示一个字符串,一个图标或同时显示字符串和图标。除了用于修饰文本域等不重要的小事情外,Swing的标签还能起到图像画布(显示一个图像的组件)的作用。由于AWT的图像不是组件,不能把它们添加到一个容器中。因此,使用AWT的开发人员实现了各种不同的图像画布类;然而,在Swing中,可以把JLabel类当作图像画面使用(注:有关图像画面的更多信息参见4.3.1“Swing组件中的定制绘制一节)
  按钮大概是使用最为普遍的用户界面组件。按钮通常带有某种边框,且可以被鼠标或快捷键激活。Swing按钮比Swing标签要复杂得多,不仅因为能够激活它们来完成某个功能,而且很多其他Swing组件都是AbstractButton类的扩展,而AbstractButton类是Swing按钮的基类。

8.1 JLabelJBution

 

8.2 JLabel

8-1 运行中的JLabel


import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

public class Test extends JApplet {

        public Test() {

               Container contentPane = getContentPane();

               JLabel imageOnly = new JLabel(new ImageIcon(this.getClass().getResource("dogs.gif")));

               JLabel textAndImage = new JLabel("Vote!",

                                              new ImageIcon(this.getClass().getResource("ballot_box.gif")),

                                              JLabel.RIGHT);

 

               JScrollPane scrollPane = new JScrollPane(imageOnly);

               scrollPane.setPreferredSize(new Dimension(270,200));

 

               contentPane.setLayout(

                       new FlowLayout(FlowLayout.CENTER, 25, 25));

 

               contentPane.add(textAndImage);

               contentPane.add(scrollPane);

        }

}


 

8.2.1内容排列

 

8-2 设置Swing标签的排列属性


import java.net.URL;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.border.*;

 

public class Test extends JApplet implements SwingConstants {

        JLabel        label   = new JLabel("Action!");

        JPanel         controlPanel   = new JPanel();

        JComboBox     alignmentHorizontal    = new JComboBox();

        JComboBox              alignmentVertical      = new JComboBox();

 

        public void init() {

               Container contentPane = getContentPane();

               ImageIcon icon = new ImageIcon(this.getClass().getResource("slate.gif"));

 

               label.setIcon(icon);

               label.setHorizontalAlignment(CENTER);

               label.setFont(new Font("Times-Roman", Font.ITALIC, 20));

 

               label.setMaximumSize(new Dimension(0, 150));

 

               setupComboBoxes();

               setupControlPanel();

 

               contentPane.setLayout(new BorderLayout());

               contentPane.add(controlPanel, "North");

               contentPane.add(label, "Center");

 

               alignmentVertical.addItemListener(new ItemListener() {

                       public void itemStateChanged(ItemEvent event) {

                               JComboBox b = (JComboBox)event.getSource();

                               String    s = (String)b.getSelectedItem();

                               int       c = getSwingConstantByName(s);

 

                               label.setVerticalAlignment(c);

                       }

               });

               alignmentHorizontal.addItemListener(new ItemListener() {

                       public void itemStateChanged(ItemEvent event) {

                               JComboBox b = (JComboBox)event.getSource();

                               String    s = (String)b.getSelectedItem();

                               int       c = getSwingConstantByName(s);

                             

                               label.setHorizontalAlignment(c);

                       }

               });

        }

        void setupComboBoxes() {

               alignmentVertical.addItem("Top");

               alignmentVertical.addItem("Center");

               alignmentVertical.addItem("Bottom");

 

               alignmentHorizontal.addItem("Left");

               alignmentHorizontal.addItem("Center");

               alignmentHorizontal.addItem("Right");

 

               alignmentVertical.setSelectedItem(

                       getSwingConstantName(

                               label.getVerticalAlignment()));

 

               alignmentHorizontal.setSelectedItem(

                       getSwingConstantName(

                               label.getHorizontalAlignment()));

        }

        void setupControlPanel() {

               controlPanel.setBorder(

                       BorderFactory.createTitledBorder("Alignment"));

 

               controlPanel.add(new JLabel(

                                              "Vertical:"));

               controlPanel.add(alignmentVertical);

               controlPanel.add(Box.createHorizontalStrut(5));

 

               controlPanel.add(Box.createHorizontalStrut(25));

 

               controlPanel.add(new JLabel(

                                              "Horizontal:"));

               controlPanel.add(Box.createHorizontalStrut(5));

 

               controlPanel.add(alignmentHorizontal);

        }

        int getSwingConstantByName(String s) {

               if(s.equalsIgnoreCase("left"))                return LEFT;

               else if(s.equalsIgnoreCase("center"))         return CENTER;

               else if(s.equalsIgnoreCase("right"))          return RIGHT;

               else if(s.equalsIgnoreCase("top"))            return TOP;

               else if(s.equalsIgnoreCase("bottom"))         return BOTTOM;

 

               return -1;

        }

        String getSwingConstantName(int c) {

               if(c == LEFT)                  return "Left";

               else if(c == CENTER)   return "Center";

               else if(c == RIGHT)    return "Right";

               else if(c == TOP)              return "Top";

               else if(c == BOTTOM)   return "Bottom";

 

               return "undefined";

        }

}


8.2.2文本的位置

 

8-3 设置标签的文本位置


import java.net.URL;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.border.*;

 

public class Test extends JApplet implements SwingConstants {

        JLabel label = new JLabel("Action!");

        JPanel controlPanel = new JPanel();

        JComboBox alignmentHorizontal = new JComboBox();

        JComboBox alignmentVertical = new JComboBox();

 

        public void init() {

               Container contentPane = getContentPane();

               ImageIcon icon = new ImageIcon(this.getClass().getResource("penguin.gif"));

 

               label.setIcon(icon);

               label.setHorizontalTextPosition(CENTER);

               label.setFont(new Font("Times-Roman", Font.ITALIC, 20));

 

               setupComboBoxes();

               setupControlPanel();

 

               label.setHorizontalAlignment(JLabel.CENTER);

               label.setVerticalAlignment(JLabel.CENTER);

 

               contentPane.setLayout(new BorderLayout());

               contentPane.add(controlPanel, "North");

               contentPane.add(label, "Center");

 

               alignmentVertical.addItemListener(new ItemListener() {

                       public void itemStateChanged(ItemEvent event) {

                               JComboBox b = (JComboBox)event.getSource();

                               String    s = (String)b.getSelectedItem();

                               int       c = getSwingConstantByName(s);

 

                               label.setVerticalTextPosition(c);

                       }

               });

               alignmentHorizontal.addItemListener(new ItemListener() {

                       public void itemStateChanged(ItemEvent event) {

                               JComboBox b = (JComboBox)event.getSource();

                               String    s = (String)b.getSelectedItem();

                               int       c = getSwingConstantByName(s);

                              

                               label.setHorizontalTextPosition(c);

                       }

               });

        }

        void setupComboBoxes() {

               alignmentVertical.addItem("Top");

               alignmentVertical.addItem("Center");

               alignmentVertical.addItem("Bottom");

 

               alignmentHorizontal.addItem("Left");

               alignmentHorizontal.addItem("Center");

               alignmentHorizontal.addItem("Right");

 

               alignmentVertical.setSelectedItem(

                       getSwingConstantName(

                               label.getVerticalTextPosition()));

 

               alignmentHorizontal.setSelectedItem(

                       getSwingConstantName(

                               label.getHorizontalTextPosition()));

        }

        void setupControlPanel() {

               controlPanel.setBorder(

                       BorderFactory.createTitledBorder("Text Position"));

 

               controlPanel.add(new JLabel( "Vertical:"));

               controlPanel.add(alignmentVertical);

               controlPanel.add(Box.createHorizontalStrut(5));

 

               controlPanel.add(Box.createHorizontalStrut(25));

 

               controlPanel.add(new JLabel("Horizontal:"));

               controlPanel.add(Box.createHorizontalStrut(5));

 

               controlPanel.add(alignmentHorizontal);

        }

        int getSwingConstantByName(String s) {

               if(s.equalsIgnoreCase("left"))                return LEFT;

               else if(s.equalsIgnoreCase("center"))         return CENTER;

               else if(s.equalsIgnoreCase("right"))          return RIGHT;

               else if(s.equalsIgnoreCase("top"))            return TOP;

               else if(s.equalsIgnoreCase("bottom"))         return BOTTOM;

 

               return -1;

        }

        String getSwingConstantName(int c) {

               if(c == LEFT)                  return "Left";

               else if(c == CENTER)   return "Center";

               else if(c == RIGHT)    return "Right";

               else if(c == TOP)              return "Top";

               else if(c == BOTTOM)   return "Bottom";

 

               return "undefined";

        }

}


8.2.3图标/文本间隙

 

8-4 设置一个标签的图标/文本间隙


import java.net.URL;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.border.*;

 

public class Test extends JApplet implements SwingConstants {

        public void init() {

               Container contentPane = getContentPane();

               JComboBox iconTextGap = new JComboBox();

               JPanel controlPanel = new JPanel();

               ImageIcon icon = new ImageIcon(this.getClass().getResource("ladybug.gif"));

 

               final JLabel label = new JLabel("Lady Bug", icon, CENTER);

 

               label.setFont(new Font("Times-Roman", Font.ITALIC, 20));

 

               iconTextGap.addItem("4");

               iconTextGap.addItem("10");

               iconTextGap.addItem("15");

               iconTextGap.addItem("20");

               iconTextGap.addItem("25");

 

               controlPanel.add(new JLabel("Icon/Text Gap:"));

               controlPanel.add(iconTextGap);

 

               contentPane.setLayout(new BorderLayout());

               contentPane.add(controlPanel, "North");

               contentPane.add(label, "Center");

 

               iconTextGap.addItemListener(new ItemListener() {

                       public void itemStateChanged(ItemEvent event) {

                               JComboBox b = (JComboBox)event.getSource();

                               String    s = (String)b.getSelectedItem();

                               int       gap = Integer.parseInt(s);

                              

                               label.setIconTextGap(gap);

                       }

               });

        }

}


8.2.4许可状态

 

8-5 设置一个标签的许可状态


import java.net.URL;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.border.*;

 

public class Test extends JApplet implements SwingConstants {

        public void init() {

               Container contentPane = getContentPane();

               JComboBox iconTextGap = new JComboBox();

               JPanel controlPanel = new JPanel();

               ImageIcon icon = new ImageIcon(this.getClass().getResource("ladybug.gif"));

 

               final JLabel label = new JLabel("Lady Bug", icon, CENTER);

 

               label.setFont(new Font("Times-Roman", Font.ITALIC, 20));

 

               iconTextGap.addItem("4");

               iconTextGap.addItem("10");

               iconTextGap.addItem("15");

               iconTextGap.addItem("20");

               iconTextGap.addItem("25");

 

               controlPanel.add(new JLabel("Icon/Text Gap:"));

               controlPanel.add(iconTextGap);

 

               contentPane.setLayout(new BorderLayout());

               contentPane.add(controlPanel, "North");

               contentPane.add(label, "Center");

 

               iconTextGap.addItemListener(new ItemListener() {

                       public void itemStateChanged(ItemEvent event) {

                               JComboBox b = (JComboBox)event.getSource();

                               String    s = (String)b.getSelectedItem();

                               int       gap = Integer.parseInt(s);

                              

                               label.setIconTextGap(gap);

                       }

               });

        }

}


8.2.5 JLabel属性

 

8.2.6 JLabel事件

 

8.2.7 JLabel类总结

 

8-6 创建JLabel实例


import java.net.URL;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.border.*;

 

public class Test extends JApplet implements SwingConstants {

        public void init() {

               Container contentPane = getContentPane();

               JComboBox iconTextGap = new JComboBox();

               JPanel controlPanel = new JPanel();

               ImageIcon icon = new ImageIcon(this.getClass().getResource("ladybug.gif"));

 

               final JLabel label = new JLabel("Lady Bug", icon, CENTER);

 

               label.setFont(new Font("Times-Roman", Font.ITALIC, 20));

 

               iconTextGap.addItem("4");

               iconTextGap.addItem("10");

               iconTextGap.addItem("15");

               iconTextGap.addItem("20");

               iconTextGap.addItem("25");

 

               controlPanel.add(new JLabel("Icon/Text Gap:"));

               controlPanel.add(iconTextGap);

 

               contentPane.setLayout(new BorderLayout());

               contentPane.add(controlPanel, "North");

               contentPane.add(label, "Center");

 

               iconTextGap.addItemListener(new ItemListener() {

                       public void itemStateChanged(ItemEvent event) {

                               JComboBox b = (JComboBox)event.getSource();

                               String    s = (String)b.getSelectedItem();

                               int       gap = Integer.parseInt(s);

                              

                               label.setIconTextGap(gap);

                       }

               });

        }

}


8.3 按钮

 

8.4 JButtion

 

8-7 一个按钮简单例子


import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

 

public class Test extends JApplet {

        JButton button = new JButton("button ...",

                                                             new ImageIcon(this.getClass().getResource("exclaim.gif")));

        int actCnt = 0;

 

        public void init() {

               Container contentPane = getContentPane();

 

               contentPane.setLayout(new FlowLayout());

               contentPane.add(button);

 

               button.addActionListener(new ActionListener() {

                       public void actionPerformed(ActionEvent event) {

                               showStatus(event.getActionCommand() +

                                                     " activated " + actCnt + " times");

                               actCnt++;

                       }

               });

        }

}


8.4.1 JButtion属性

 

8.4.2 JButtion事件

 

8-8 处理JButton事件


import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

 

public class Test extends JApplet {

        //Icon icon = new ImageIcon("icon.gif");

        JButton button = new JButton("button");

 

        public Test() {

               Container contentPane = getContentPane();

 

               button.setRolloverIcon(new ImageIcon(this.getClass().getResource("punch.gif")));

               button.setIcon(new ImageIcon(this.getClass().getResource("open_hand.gif")));

 

               contentPane.setLayout(new FlowLayout());

               contentPane.add(button);

 

               button.addActionListener(new ActionListener() {

                       public void actionPerformed(ActionEvent e) {

                               System.out.println("action!");

                       }

               });

               button.addChangeListener(new ChangeListener() {

                       public void stateChanged(ChangeEvent e) {

                               System.out.println(getButtonState());

                       }

               });

        }

        private String getButtonState() {

               ButtonModel model = button.getModel();

               String state = "Button State: ";

 

               state += model.isSelected() ? "selected" : "deselected";

               state += model.isPressed() ? ", pressed" :

                                                                      ", not pressed";

               state += model.isArmed() ? ", armed" : ", disarmed";

               state += model.isRollover() ? ", rollover" :

                                                                       ", not rollover";

 

               return state;

        }

}


8.4.3 JButtion类总结

 

8-9 创建JButton实例


import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

public class Test extends JApplet {

        Icon icon = new ImageIcon("icon.gif");

 

        JButton noargButton = new JButton(),

                               textButton = new JButton("text"),

                               textIconButton = new JButton("text", icon),

                               iconButton = new JButton(icon);

 

        public Test() {

               Container contentPane = getContentPane();

 

               contentPane.setLayout(new FlowLayout());

               contentPane.add(noargButton);

               contentPane.add(textButton);

               contentPane.add(iconButton);

               contentPane.add(textIconButton);

        }

}


8-10 把一个按钮指定为缺省的按钮


import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

public class Test extends JApplet {

        Icon icon = new ImageIcon("icon.gif");

 

        JButton noargButton = new JButton(),

                               textButton = new JButton("text"),

                               textIconButton = new JButton("text", icon),

                               iconButton = new JButton(icon);

 

        public Test() {

               Container contentPane = getContentPane();

 

               contentPane.setLayout(new FlowLayout());

               contentPane.add(noargButton);

               contentPane.add(textButton);

               contentPane.add(iconButton);

               contentPane.add(textIconButton);

        }

}


 

8-11 程序方式单击一个按钮


import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

public class Test extends JApplet {

        int clickDuration = 68;

 

        public Test() {

               Container contentPane = getContentPane();

               JPanel controlPanel = new JPanel();

               JPanel buttonPanel = new JPanel();

 

               JButton doClick = new JButton("do click");

               final JButton clickMe = new JButton("click me");

 

               final JComboBox comboBox = new JComboBox(new Object[] {

                               "68", "250", "500", "750", "1000"

               });

 

               controlPanel.add(new JLabel("Click Duration:"));

               controlPanel.add(comboBox);

 

               buttonPanel.add(doClick);

               buttonPanel.add(clickMe);

 

               contentPane.add(controlPanel, BorderLayout.NORTH);

               contentPane.add(buttonPanel, BorderLayout.CENTER);

 

               getRootPane().setDefaultButton(doClick);

 

               doClick.addActionListener(new ActionListener() {

                       public void actionPerformed(ActionEvent e) {

                               clickMe.doClick(clickDuration);

                       }

               });

 

               comboBox.addItemListener(new ItemListener() {

                       public void itemStateChanged(ItemEvent e) {

                               if(e.getStateChange() == ItemEvent.SELECTED) {

                                      clickDuration = Integer.parseInt((String)

                                                                     comboBox.getSelectedItem());

                               }

                       }

               });

        }

}


8-12 JButton图标


import javax.swing.*;

import javax.swing.border.*;

import javax.swing.plaf.basic.*;

import java.awt.*;

import java.awt.event.*;

 

public class Test extends JApplet {

        public void init() {

               Container contentPane = getContentPane();

               Icon icon = new StringIcon("icon for JButton"),

                        rolloverIcon = new StringIcon("rollover"),

                        pressedIcon = new StringIcon("pressed"),

                        disabledIcon = new StringIcon("disabled"),

                        selectedIcon = new StringIcon("selected"),

                        rolloverSelectedIcon =

                                      new StringIcon("rollover selected"),

                        disabledSelectedIcon =

                                      new StringIcon("disabled selected");

 

               final JButton button = new JButton();

 

               button.setRolloverEnabled(true);

 

               button.setIcon(icon);

               button.setRolloverIcon(rolloverIcon);

               button.setRolloverSelectedIcon(rolloverSelectedIcon);

               button.setSelectedIcon(selectedIcon);

               button.setPressedIcon(pressedIcon);

               button.setDisabledIcon(disabledIcon);

               button.setDisabledSelectedIcon(disabledSelectedIcon);

 

               JComboBox cb = new JComboBox();

               cb.addItem("enabled");

               cb.addItem("disabled");

 

               cb.addItemListener(new ItemListener() {

                       public void itemStateChanged(ItemEvent e) {

                               if(e.getStateChange() == ItemEvent.SELECTED) {

                                      String item = (String)e.getItem();

 

                                      if(item.equals("enabled")) {

                                              button.setEnabled(true);

                                      }

                                      else {

                                              button.setEnabled(false);

                                      }

                               }

                       }

               });

               contentPane.setLayout(new FlowLayout());

               contentPane.add(cb);

               contentPane.add(button);

        }

}

class StringIcon implements Icon {

        private String s;

 

        public StringIcon(String s) {

               this.s = s;

        }

        public int getIconWidth() { return 100; }

        public int getIconHeight() { return 100; }

 

        public void paintIcon(Component c, Graphics g, int x, int y) {

               FontMetrics fm = g.getFontMetrics();

               g.setColor(c.getForeground());

               g.drawString(s, 10, fm.getHeight());

        }

}


 

8-13 设置按钮边距


import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

public class Test extends JApplet {

        public Test() {

               Container contentPane = getContentPane();

               JButton button = new JButton("button");

 

               button.setMargin(new Insets(50,25,10,5));

               contentPane.setLayout(new FlowLayout());

               contentPane.add(button);

        }

}


8-14 按钮助记符


import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

public class Test extends JApplet {

        public Test() {

               Container contentPane = getContentPane();

               JButton button = new JButton("button With Mnemonic");

 

               button.setMnemonic('M');

 

               contentPane.setLayout(new FlowLayout());

               contentPane.add(button);

        }

}


 

 

 

目录
相关文章
|
4月前
|
Java 开发者 UED
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
65 3
|
3月前
|
XML JavaScript Java
NekoHTML 是一个基于Java的HTML扫描器和标签补全器
**NekoHTML** 是一个基于Java的HTML扫描器和标签补全器(tag balancer),由J. Andrew Clark开发。它主要用于解析HTML文档,并能够“修正”许多在编写HTML文档过程中常犯的错误,如增补缺失的父元素、自动用结束标签关闭相应的元素,以及处理不匹配的内嵌元素标签等。这使得程序能够以标准的XML接口来访问HTML文档中的信息。 ### NekoHTML的主要特点包括: 1. **错误修正**:能够自动修正HTML中的常见错误,如未闭合的标签等。 2. **DOM树生成**:将HTML源代码转化为DOM(Document Object Model)结构,便
|
4月前
|
安全 Java API
|
4月前
|
JavaScript Java
点击按钮,向下添加目录。Java script+jQuery写法
点击按钮,向下添加目录。Java script+jQuery写法
26 1
|
4月前
|
SQL Java 数据库连接
【Java】Java Swing 图书管借阅管理系统(源码+论文)【独一无二】
【Java】Java Swing 图书管借阅管理系统(源码+论文)【独一无二】
192 0
|
4月前
|
存储 数据可视化 Java
【Java】Java swing 民宿管理系统 GUI(源码+可视化界面)【独一无二】
【Java】Java swing 民宿管理系统 GUI(源码+可视化界面)【独一无二】
|
5月前
|
Java 容器
Java详解:GUI图形用户界面设计—容器组件及面板布局方式
Java详解:GUI图形用户界面设计—容器组件及面板布局方式
137 0
|
6月前
|
前端开发 Java UED
Java中的图形用户界面编程:Swing与JavaFX的比较与应用
Java中的图形用户界面编程:Swing与JavaFX的比较与应用
|
21天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####