首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

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

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

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

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);

       }

}

热点排行