Swing操作 - 链接菜单和工具栏

时间:2015-12-30 03:00:52

标签: java swing

我一直在学习Java Swing,我正在努力学习行动 我可以成功创建操作对象,并使用它们将项目从JToolBar链接到JMenuItems我的问题是,构建的操作在工具栏中显示图标文本(应该只是图标)
请查看以下代码:

import java.awt.*;    
import java.awt.event.*;  
import javax.swing.*;  

class MenuDemo{  

   MenuDemo(){  
      JFrame jfrm = new JFrame("Complete Menu Demo");  
      jfrm.setSize(220, 200);  
      jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

      JMenuBar jmb = new JMenuBar();  

      /* Make the action object */  
      ImageIcon setIcon = new ImageIcon("setBP.png");  
      DebugAction setAct = new DebugAction("Set Breakpoint",   
                                         setIcon, KeyEvent.VK_S,   
                                         KeyEvent.VK_B, "Set Breakpoint");  

      /* Make the toolbar */  
      JButton jbtnSet    = new JButton(setAct);  
      JToolBar jtb = new JToolBar("Breakpoints");  
      jtb.add(jbtnSet);  

      /* Make the menu */  
      JMenu jmDebug = new JMenu("Debug");  
      JMenuItem jmiSetBP = new JMenuItem(setAct);  
      jmDebug.add(jmiSetBP);  

      jmb.add(jmDebug);  
      jfrm.getContentPane().add(jtb, BorderLayout.NORTH);  
      jfrm.setJMenuBar(jmb);  
      jfrm.setVisible(true);  
   }  

   class DebugAction extends AbstractAction{  
     public DebugAction(String name, Icon image, int mnem,  
                         int accel, String tTip){  
        super(name, image);  

        putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(accel,  
                 InputEvent.CTRL_MASK));  
        putValue(MNEMONIC_KEY, new Integer(mnem));  
        putValue(SHORT_DESCRIPTION, tTip);  
     }  

     public void actionPerformed(ActionEvent ae){  
     }  
   }  

   public static void main(String[] args){  
      SwingUtilities.invokeLater(new Runnable(){  
         public void run(){  
           new MenuDemo();  
         }  
      });  
   }  
}  

该程序产生以下GUI:

Screenshot of GUI with Text in JToolbar Icon Screenshot of GUI with Menu Showing

我只想要JToolBar中的绿色按钮,而不是文字。我认为我的问题代码位于DebugAction构造函数中,我在其中调用super(name, image)。对于工具栏按钮,我只想传递图像。但对于我想要的菜单。如何“关闭”JToolBar项目的文字?谢谢!

2 个答案:

答案 0 :(得分:4)

  

如何“关闭”JToolBar项目的文本?

您可以使用以下方式将其关闭:

JButton button = new JButton( action );
button.setHideActionText( true );

或者,您可以重置按钮上的文字:

JButton button = new JButton( action );
button.setText("");

答案 1 :(得分:0)

我接受了camickr的回答,但有一个警告。

出于识别目的,我正在抓住这些按钮的actionCommand。 setHideActionText(true);button.setText("")都会删除文本,但在我尝试抓取actionCommand时都会产生错误。
为了解决这个问题,我在创建动作对象时通过在构造函数中添加额外的行来显式设置actionCommand:

putValue(ACTION_COMMAND_KEY, sometext);

这解决了错误。