2015-12-30 53 views
0

我一直在研究Java Swing,並且正在學習操作。
我可以成功創建動作對象,並使用它們將項目從JToolBar鏈接到JMenuItems我的問題是,構建的動作顯示圖標文本在工具欄(應該只是圖標)
看看下面的代碼:Swing操作 - 鏈接菜單和工具欄

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 IconScreenshot of GUI with Menu Showing

我只是想在JToolBar,不是文本鏈接。我認爲我的問題代碼是在DebugAction構造函數中,我呼叫super(name, image)。對於工具欄按鈕,我只想傳入圖像。但對於我想要的菜單。如何「關閉」JToolBar項目的文字?謝謝!

回答

4

如何「關閉」JToolBar項目的文本?

你把它關掉使用:

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

或者,你可以簡單的復位按鈕上的文字:

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

有人給這個傢伙一個餅乾!像魅力一樣工作。謝謝! – Seanimus

0

我接受camickr的答案,但有一個警告。

爲了識別目的,我抓住了這些按鈕的actionCommand。 setHideActionText(true);button.setText("")都會刪除文本,但是當我嘗試抓取actionCommand時都會產生錯誤。
爲了解決這個問題,我明確地設置actionCommand當我通過添加額外的線在構造函數中創建操作對象:

putValue(ACTION_COMMAND_KEY, sometext);

這種固定的錯誤。

+0

一般來說,一個Action是自包含的,所以需要「文本」或「ActionCommand」通常不需要知道 – MadProgrammer

+0

我已經將幾個組件鏈接到相同的actionListener,所以我使用actionCommand確定選中的JButton/JMenuItem。 – Seanimus

+0

這是我的觀點,你做錯了 – MadProgrammer