(2)通常,工具条所提供的 *** 作是菜单所能提供 *** 作的一个子集,目的是能够快速访问那些使用频率高的 *** 作。
(3)工具条通常被置于布局为BorderLayout的容器中。工具条被置于布局为BorderLayout的一个面板中。工具条还有一个特点:可以被拖动到所在容器其它边界,甚至脱离其所在的容器。
(4)生成一个工具条对象,可以使用语句:
JToolBar toolbar=new JToolBar()
(5)还可以在生成工具条时,指明工具条的标题。这样,当工具条脱离所在容器时,可以在自己的标题栏显示标题:
JToolBar toolbar=new JToolBar("颜色工具条")
(6)向工具条中添加组件,使用add方法:
toolbar.add(btnBlue)
toolbar.add(btnYellow)
(7)缺省情况下,组件是按照水平方式逐个添加入工具条的,也可以在生成工具条时指明以垂直方式来添加组件:
JToolBar toolbar=new JToolBar(SwingConstants.VERTICAL)
(8)如果希望工具条不能移动,可以使用setFloatable方法来设置:
toolbar.setFloatable(false)
(9)当工具条中的按钮上只显示图标时,用户可能不能确切知道各个按钮的具体含义。可以使用工具提示解决这个问题:
btnYellow.setToolTipText("面板置为黄色")
public static void main(String[] args) {new WindowViewer()
}
swing有一套自己的界面显示机制.swing的所有组件应该运行在swing 的 事件线程里 ,而不是主线程.你不能在其他线程直接(可以间接,但是为了耗时 *** 作等其他情况准备的)调用任何的组件(比如JMenuBar).必须调用SwingUtilities.invokeLater新建一个线程通知swing事件线程要求UI界面更新的事件,由swing的事件线程管理对组件的所有 *** 作. 这是正确的做法.如果本身是事件线程,可以直接 *** 作组件.
//改成如下代码就好了
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {//SwingUtilities 里有invokeLater和invokeAndWait方法
public void run() {
new WindowViewer()
}
})
}
更多问题请参考SwingUtilities的API
代码如下:
public class App extends JFrame {
public App() {
this.setSize(400, 400)
this.setLocationRelativeTo(null)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
// 添加菜单
JMenuBar menuBar = new JMenuBar()
this.setJMenuBar(menuBar)
JMenu menu = new JMenu("文件")
menuBar.add(menu)
JMenuItem testMenuItem = new JMenuItem("打开")
testMenuItem.addActionListener(e -> JOptionPane.showMessageDialog(this, "打开"))
menu.add(testMenuItem)
// 添加工具栏
JToolBar toolBar = new JToolBar()
this.add(toolBar, BorderLayout.NORTH)
JButton btnSave = new JButton("保存")
btnSave.addActionListener(e -> JOptionPane.showMessageDialog(this, "保存"))
toolBar.add(btnSave)
}
public static void main(String[] args) {
new App().setVisible(true)
}
}
运行结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)