使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识。
day080 Swing用户界面组件(五:菜单二)(工具栏、工具提示)
1.工具栏
工具栏是在程序中提供的快速访问常用命令的按钮栏,如图1所示。工具栏的特殊之处在于可以将它随处移动。可以将它拖拽到框架的四个边框上,如图2所示。
释放鼠标按钮后,工具栏将会停靠在新的位置上,如图1所示。工具栏可以完全脱离框架。这样的工具栏将包含在自己的框架中,如图2所示。当关闭包含工具栏的框架时,它会冋到原始的框架中。
编写创建工具栏的代码非常容易,并且可以将组件添加到工具栏中:
JToolBar bar=new JToolBar();
bar.add(blueButton);
JToolBar类还有一个用来添加Action对象的方法,可以用Action对象填充工具栏:
bar.add(blueAction);
这个动作的小图标将会出现在工具栏中。可以用分隔符将按钮分组:
bar.addSeparator();
例如,图中的工具栏有一个分隔符,它位于第三个按钮和第四个按钮之间。然后,将工具栏添加到框架中:
add(bar,BorderLayout.NORTH):
当工具栏没有停靠时,可以指定工具栏的标题:
bar=new JToolBar(titleString);
在默认情况下,工具栏最初为水平的。如果想要将工具栏垂直放置,可以使用下列代码:
bar=new JToolBar(SwingConstants.VERTICAL)
或者
bar=new JToolBar(titleString,SwingConstants.VERTICAL)
按钮是工具栏中最常见的组件类型。然而工具栏中的组件并不仅限如此。例如,可以往工具栏中加人组合框。
2.工具提示
工具栏有一个缺点,这就是用户常常需要猜测按钮上小图标按钮的含义。为了解决这个问题,用户界面设计者发明了工具提示(tooltips)。当光标停留在某个按钮上片刻时,工具提示就会被激活。工具提示文本显示在一个有颜色的矩形里。当用户移开鼠标时,工具提示就会自动地消失。如图所示。
在Swing中,可以调用setToolText方法将工具提不添加到JComponent上:exitButton.setToolTipText("Exit");
还有一种方法是,如果使用Action对象,就可以用SHORT_DESCRIPTION关联工具提示:
exitAction.putValue(Action.SHORTJESCRIPnON, "Exit");
下面的程序说明了如何将一个Action对象添加到菜单和工具栏中。
注意,动作名在菜单中就是菜单项名,而在工具栏中就是简短的说明。
/**
*@author zzehao
*/
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JToolBar;
public class ToolBarFrame extends JFrame
{
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT =200;
private JPanel panel;
public ToolBarFrame()
{
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
panel = new JPanel();
add( panel, BorderLayout.CENTER );
Action blueAction = new ColorAction( "Blue", new ImageIcon("blue-ball.gif"), Color.BLUE );
Action yellowAction = new ColorAction( "Yellow", new ImageIcon("yellow-ball.gif"), Color.YELLOW );
Action redAction = new ColorAction( "Red", new ImageIcon("yed-ball.gif"), Color.RED );
Action exitAction = new AbstractAction( "Exit", new ImageIcon("exit.gif") ) {
@Override
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
};
exitAction.putValue(Action.SHORT_DESCRIPTION, "Exit");
JToolBar bar = new JToolBar();
bar.add(blueAction);//返回的是一个按钮,即相当于在工具栏中增加一个按钮
bar.add(yellowAction);
bar.add(redAction);
bar.addSeparator();
bar.add(exitAction);
add(bar,BorderLayout.NORTH);
//将Action对象添加到菜单栏中
JMenu menu = new JMenu("Color");
menu.add(yellowAction);
menu.add(blueAction);
menu.add(redAction);
menu.add(exitAction);
JMenuBar menuBar = new JMenuBar();
menuBar.add(menu);
setJMenuBar(menuBar);
}
//动作
class ColorAction extends AbstractAction
{
public ColorAction( String name, Icon icon, Color c )
{
putValue(Action.NAME, name);
putValue(Action.SMALL_ICON, icon);
putValue(Action.SHORT_DESCRIPTION, name+" background");
putValue("Color", c);
}
@Override
public void actionPerformed(ActionEvent e)
{
Color c = (Color) getValue("Color");
panel.setBackground(c);
}
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
JFrame frame = new ToolBarFrame();//初始化窗口
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置:关闭窗口,则程序退出
frame.setVisible(true);//显示窗口
}
});
}
}
运行的结果是: