代码之家  ›  专栏  ›  技术社区  ›  Qamar Irfan

如何使JButton打开不同的帧?

  •  0
  • Qamar Irfan  · 技术社区  · 7 年前

    我创建了2个jbutton,但都打开了同一个文件如何使第二个按钮打开另一个文件。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    //Starting Page
    
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt. *;
    import java.io.*;
    
    
       public class AddressBook implements ActionListener     // Create a new class Address Book
    {
        JFrame Start=new JFrame("Address Book");     // Set name of Frame
        JButton Open;              // Set new button
        JButton Second;
     {
          Open=new JButton("OPEN");     // set name of button
          Second=new JButton("Second");
          Start.setSize(500,600);       // set size of frame
          Start.add(new JLabel(new ImageIcon("backgroundforlab.jpg")));      // add background picture
          Start.setVisible(true); 
          Start.setLayout(null);
          Start.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);  
          Start.getContentPane().add(Open);                           //Make button visible
          Start.getContentPane().add(Second); 
          Open.setBounds(100,385,295,88);  
          Second.setBounds(50,160,150,44);                           // set size of button
          Open.addActionListener(this);
          Second.addActionListener(this);
    
     }
    
       public void actionPerformed(ActionEvent e)
    {
          Start.dispose();              // When button is clicked close frame and open mainMenu 
          mainMenu A=new mainMenu();    
    }
    
       public static void main(String ag[])
      {
          AddressBook A=new AddressBook();          // run class AddressBook
      }  
    
    
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Community CDub    4 年前

    你可以。。。

    使用单独的 ActionListener s代表您的按钮

    Open.addActionListener(new OpenActionListener());
    Second.addActionListener(new SecondActionListener());
    

    您需要提供 监听器 s作为附加类

    这可能是首选方法之一,因为它将操作的功能/责任隔离到单个类,但它确实创建了一组小类。

    你可以。。

    改用匿名类。。。

    Open.addActionListener(new ActionListener() {
        @Overrride
        public void actionPerformed(ActionEvent e) {
            //...
        }
    });
    

    这与之前的想法基本相同,但不需要单独的类来管理

    你可以。。。

    使用 actionCommand 属性来标识按钮

    Open.setActionCommand("open");
    Second.setActionCommand("second");
    
    //...
    
    public void actionPerformed(ActionEvent e) {
      String command = e.getActionCommand();
      if ("open".equals(command)) {
          //...
      } else if ("second".equals(command)) {
          //...
      }
    }
    

    如果您有许多重复操作的按钮(如菜单和工具栏按钮),这很好

    你可以。。。

    使用 source 属性来标识按钮

    public void actionPerformed(ActionEvent e) {
      Object source = e.getSource();
      if (source == open) {
          //...
      } else if (source == second) {
          //...
      }
    }
    

    只有当 监听器 可以访问按钮的实际引用。这使得它的使用受到限制,尤其是因为有更好的解决方案可用

    您还应该看看:

    了解更多细节和想法