创建复杂的用户界面
Swing包含400多个不同的类,在这使其成为Java中最大的类库。其中的很多类可用之前介绍的技术来实现——所有Swing容器和组件由相同的超类,这使他们的行为相同。下面我们将介绍Swing程序中使用的其他组件。
1、滚动窗格
要从组件的一部分移动到另一部分,可使用垂直和水平滚动条。在Swing中通过将组件加入到滚动窗格中来提供滚动功能。滚动窗格是一种容器,用Swing中的JscrollPane类表示,可以使用一下函数来创建:
JscrollPane():创建必要时显示垂直和水平滚动条的滚动窗格;
JScrollPane(int , int):创建包含指定的垂直和水平滚动条的滚动窗格;
JscrollPane(Component):创建包含指定用户界面组件滚动窗格;
JscrollPane(Component , int, int):创建包含指定组件以及垂直和水平滚动条的滚动窗格;
在构造函数中使用整型参数指定如何在窗格中使用滚动条,可使用下述变量作为参数:
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED或JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED
JScrollPane.VERTICAL_SCROLLBAR_NEVER或JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS或JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS
如果创建了没有包含组件的滚动窗格,可以使用窗格的add(Component)方法来添加组件。设置好滚动窗格后,应将其像组件那样加入到容器中。
下面是一个使用滚动窗格的示例程序:
import java.awt.FlowLayout;
importjava.awt.HeadlessException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
importjavax.swing.JScrollPane;
importjavax.swing.JTextArea;
importjavax.swing.JTextField;
public class MyCheckBoxextends JFrame{
public MyCheckBox() throwsHeadlessException {
super("复选框测试");
setSize(370, 270);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FlowLayout flowLayout = newFlowLayout(FlowLayout.RIGHT);
setLayout(flowLayout);
JPanel row1 = new JPanel();
JLabel label1 = newJLabel("To:");
JTextField textField1 = newJTextField(24);
row1.add(label1);
row1.add(textField1);
add(row1);
JPanel row2 = new JPanel();
JLabel label2 = newJLabel("Subject:");
JTextField textField2 = newJTextField(24);
row2.add(label2);
row2.add(textField2);
add(row2);
JPanel row3 = new JPanel();
JLabel label3 = newJLabel("Message:");
JTextArea textArea = new JTextArea(4,22);
//设置文本自动换行
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
//将组件加入滚动条,并设置滚动条的类型
JScrollPane scrollPane = newJScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
row3.add(label3);
row3.add(scrollPane);
add(row3);
JPanel row4 = new JPanel();
JButton button = newJButton("Send");
row4.add(button);
add(row4);
setVisible(true);
}
public static void main(String[] args)
{
MyCheckBox checkBox = new MyCheckBox();
}
}
Message中输入的文本自动换行是使用上面有注的语句实现的
2、滑块
对于用户来说,输入数字最简单的方法之一就是使用滑块,这是个可上下或左右拖拽的组件。在Swing中,滑块用JSlider类表示。
滑块用于从指定范围选择一个数字,这些值可显示在标签上,包括最小值、最大值和中值。
可以使用下面的构造函数来创建水平滑块:
JSlider():创建最小值为0,最大值为100,初始值为50的滑块;
JSlider(int , int):创建具有指定最大和最小值的滑块;
JSlider(int , int , int):创建具有指定最大和最小值、初始值的滑块。
要创建垂直滑块,必须使用接受另外一个附加参数的构造函数,该参数应设置为类变量JSlider.VERTICAL或JSlider.HORIZONTAL。
下面的语句创建一个垂直滑块,可选择1~1000的整数:
JSlider slider = new Jslier(JSlider.VERTICAL, 1 , 1000 , 500);
要在滑块上显示标签,必须设置标签包含的信息。调用滑块的setMajorTickSpacing(int)和setMinorTickSpacing(int)方法指定标签上刻度的密度。住刻度使用的线条比次刻度粗。
在设置了刻度的密度后,可调用滑块的setPaintTicks(boolean)方法和setPaintLabels()方法控制刻度和标签的显示,下面是一个显示效果:
3、变更监听器
为了监视用户使用滑块进行的输入,必须有实现ChangeListener接口的类,该接口位于javax.swing.event包中。该接口只包含一个方法,格式如下:
Public voidstateChanged(ChangeEvent e){}
调用滑块所属的容器的addChangeListener(Object)方法,可以讲对象注册为变更监听器,滑块移动停止后,将调用监听对象的stateChanged()方法。调用该对象的getSource()方法将获得滑块的焦点值。
通过调用getValueIsAdjusting()判断滑块是否在移动。下面是一个通过3个滑块来改变颜色的示例,代码太多大家可以自行下载,地址为:http://download.csdn.net/detail/zhai56565/5151200下面是程序运行效果图:
4、使用图像图标和工具栏
为改善图形用户界面的视觉效果,最简单的一种方法是使用图标来标识按钮和界面的其他部分。为此可使用javax.swing包中的ImageIcon类来用图片标记组件。
可以调用ImageIcon(String)函数使用计算机中的文件来创建ImageIcon。该方法的参数可以是文件名,也可以是文件的文职和名称,如下:
ImageIcon imgIcn = new ImageIcon(“a1.png”);
ImageIcon imgIcn2 = new ImageIcon(“images/a2.png”);
用于创建图像图标的图形文件必须是GIF、JPEG或PNG格式。大多数为GIF格式,因为它非常适合用于显示只有几种颜色的小图形。
下面是将图标用于标签和按钮之上:
ImageIcon imageIcon1 = newImageIcon("src/guessyourchance/144001617112153.gif");
JLabel label = new JLabel(imageIcon1);
ImageIcon imageIcon2 = newImageIcon("src/guessyourchance/folder/a1.png");
JButton button = newJButton(imageIcon2);
有些组件可同时包含图标和文本,这需要大家自行测试。
下面是工具栏,工具栏是一种将多个组件放在单行或单列中的容器。工具栏是使用JToolBar类创建的,可被设计为允许用户在图形用户界面中移动他们,这被称为“停靠”,而这种组件也被称为“可停靠的工具栏”;
可以调用下面的构造函数之一来创建工具栏:
JToolBar():创建沿水平方向排列组件的工具栏;
JToolBar(int):创建沿指定方向排列的组件的工具栏,指定的方向可以是SwingContants.HORIZONTAL或SwingContants.VERTICAL。
将组件加入到工具栏的方式与加入到其他容器相同:调用add(Component)方法并将要降入的组件作为参数。
对于可停靠的工具栏,必须放在使用BorderLayout布局管理器的容器中,此时容器应只使用其中的两个区域:中央区域和一个方向区域。
下面的语句创建一个可停靠的垂直工具栏:
JPanel panel =new JPanel();
BorderLayout layout = newBorderLayout();
panel.setLayout(layout);
JToolBar toolBar = newJToolBar(SwingConstants.VERTICAL);
ImageIcon imageIcon1 = newImageIcon("src/guessyourchance/144001617112153.gif");
ImageIcon imageIcon2 = newImageIcon("src/guessyourchance/folder/a1.png");
JLabel label = new JLabel(imageIcon2);
JButton button1 = newJButton(imageIcon1);
JButton button2 = newJButton(imageIcon1);
toolBar.add(label);
toolBar.add(button1);
toolBar.add(button2);
panel.add(toolBar , BorderLayout.WEST);
add(panel);