2012-09-07 17 views
1

我在阅读java书籍,作者使用相同的操作创建菜单项目和工具栏项目。 如何使用NetBeans来做到这一点? 这里是代码:如何使用Java Swing操作在Netbeans中创建菜单项和工具栏项目

public class ActionInterfaceDemo extends JFrame{ 

    private JPanel buttonPanel = new JPanel(); 
    private FlowLayout flowLayout = new FlowLayout(); 

    //---Default constructor 
    public ActionInterfaceDemo() 
    { 
     //Create image icons 
     ImageIcon leftImageIcon = new ImageIcon(getClass().getResource("image/leftAlignment.png")); 
     ImageIcon centerImageIcon = new ImageIcon(getClass().getResource("image/centerAlignment.png")); 
     ImageIcon rightImageIcon = new ImageIcon(getClass().getResource("image/rightAlignment.png")); 

     //Create actions 
     Action leftAction = new MyAction("Left", leftImageIcon, "Left alignment for the buttons in the panel", new Integer(KeyEvent.VK_L), KeyStroke.getKeyStroke(KeyEvent.VK_L, ActionEvent.CTRL_MASK)); 
     Action centerAction = new MyAction("Center",centerImageIcon, "Center alignment for the buttons in the panel", new Integer(KeyEvent.VK_C), KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK)); 
     Action rightAction = new MyAction("Right", rightImageIcon, "Right alignment for the buttons in the panel", new Integer(KeyEvent.VK_R), KeyStroke.getKeyStroke(KeyEvent.VK_R, ActionEvent.CTRL_MASK)); 

     //Create menus 
     JMenuBar jMenuBar1 = new JMenuBar(); 
     JMenu jmenuAlignment = new JMenu("Alignment"); 
     setJMenuBar(jMenuBar1); 
     jMenuBar1.add(jmenuAlignment); 

     //Add actions to the menu 
     jmenuAlignment.add(leftAction); 
     jmenuAlignment.add(centerAction); 
     jmenuAlignment.add(rightAction); 

     //Add actions to the toolbar 
     JToolBar jToolBar1 = new JToolBar(JToolBar.HORIZONTAL); 
     jToolBar1.setBorder(BorderFactory.createLineBorder(Color.red)); 
     jToolBar1.add(leftAction); 
     jToolBar1.add(centerAction); 
     jToolBar1.add(rightAction); 

     //Add buttons to the button panel 
     buttonPanel.setLayout(flowLayout); 
     JButton jbtLeft = new JButton(leftAction); 
     JButton jbtCenter = new JButton(centerAction); 
     JButton jbtRight = new JButton(rightAction); 
     buttonPanel.add(jbtLeft); 
     buttonPanel.add(jbtCenter); 
     buttonPanel.add(jbtRight); 

     //Add toolbar to the east and panel to the center 
     add(jToolBar1, BorderLayout.NORTH); 
     add(buttonPanel, BorderLayout.CENTER); 
    } 


    //inner class MyAction 
    private class MyAction extends AbstractAction 
    { 
     String name; 

     MyAction(String name, Icon icon) 
     { 
      super(name, icon); 
      this.name = name; 
     } 

     MyAction(String name, Icon icon, String desc, Integer mnemonic, KeyStroke accelerator) 
     { 
      super(name,icon); 
      putValue(Action.SHORT_DESCRIPTION, desc); 
      putValue(Action.MNEMONIC_KEY, mnemonic); 
      putValue(Action.ACCELERATOR_KEY, accelerator); 
      this.name = name; 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      if (name.equals("Left")) 
       flowLayout.setAlignment(FlowLayout.LEFT); 
      else if (name.equals("Center")) 
       flowLayout.setAlignment(FlowLayout.CENTER); 
      else if (name.equals("Right")) 
       flowLayout.setAlignment(FlowLayout.RIGHT); 

      buttonPanel.revalidate(); 
     } 
    } 


    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 
     ActionInterfaceDemo frame = new ActionInterfaceDemo(); 
     frame.setLocationRelativeTo(null); //Center the frame 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setTitle("ActionInterfaceDemo"); 
     //frame.pack(); 
     frame.setSize(new Dimension(600, 200)); 
     frame.setVisible(true); 
    } 
} 

谢谢。

+0

你是什么意思*相同的行动*? –

+0

我的意思是使用它们的add方法在JMenu和JToolBar的构造函数中使用了相同的动作。 – skiabox

+0

我正在尝试将代码手动添加到我创建的Netbeans JForm中。我相信,如果您知道自己在做什么,那就没有问题。 – skiabox

回答

1

JMenuItemJButton都有一个setAction()方法,您可以用它来设置Action的同一个实例。

+1

['FileMenu'](http://stackoverflow.com/questions/4038605)是一个相关的例子。 – trashgod

+0

我决定使用构造函数手工编写代码。我无法在预览或设计模式下看到结果,但在运行项目时可以看到结果。 – skiabox

相关问题