我一直在学习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:
我只想要JToolBar
中的绿色按钮,而不是文字。我认为我的问题代码位于DebugAction
构造函数中,我在其中调用super(name, image)
。对于工具栏按钮,我只想传递图像。但对于我想要的菜单。如何“关闭”JToolBar
项目的文字?谢谢!
答案 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);
这解决了错误。