簡體   English   中英

Java無法關閉JFrame

[英]Java not able to close the JFrame

單擊按鈕后,我無法關閉框。 棘手的部分是,我不需要退出整個應用程序,只需關閉GUI(無需系統退出)即可。 你能幫我嗎? 先感謝您!!!

Main.java

public class Main {
public static void main(String[] args) {
    System.setProperty("webdriver.gecko.driver", "C:/geckodriver.exe");
    WebDriver driver = new FirefoxDriver();
    driver.get("https://my.emerchantpay.com/");
    eMerchantPay emp = PageFactory.initElements(driver, eMerchantPay.class);
    SwingUtilities.invokeLater(new Runnable() {
       public void run() {
            JFrame frame = new MainFrame("Please enter your credentials");
            frame.setSize(500, 400);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
       }
    });

MainFrame.java

public class MainFrame extends JFrame {

private DetailsPanel detailsPanel;

public MainFrame(String title) {
    super(title);

    // Set layout manager
    setLayout(new BorderLayout());

    // Create Swing components
    final JTextArea textArea = new JTextArea();

    detailsPanel = new DetailsPanel();

    detailsPanel.addDetailsListener(new DetailListener() {


        public void detailEventOccured(DetailEvent event) {
            String text = event.getText();

            textArea.append(text);
        }
    });

    // Add Swing components to content pane
    Container c = getContentPane();

    //c.add(textArea, BorderLayout.CENTER);
    c.add(detailsPanel, BorderLayout.CENTER);
}

DetailsPanel.java

public class DetailsPanel  extends JPanel{

private static final long serialVersionUID = 1234567891;

private EventListenerList listenerList = new EventListenerList();

public DetailsPanel() {
    Dimension size = getPreferredSize();
    size.width = 250;
    setPreferredSize(size);

    setBorder(BorderFactory.createTitledBorder("Personal Details"));

    JLabel nameLabel = new JLabel("Name: ");
    JLabel passwordLabel = new JLabel("Password: ");

    final JTextField nameField = new JTextField(10);
    final JPasswordField passwordField = new JPasswordField(10);

    JButton addBtn = new JButton("Submit");

    addBtn.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(java.awt.event.ActionEvent e) {
            String name = nameField.getText();
            String password = passwordField.getText();

            String text = name + ": " + password + "\n";

            System.out.println (text);
        }
    });

    setLayout(new GridBagLayout());

    GridBagConstraints gc = new GridBagConstraints();

    /// First column ///
    gc.anchor = GridBagConstraints.LINE_END;
    gc.weightx = 0.5;
    gc.weighty = 0.5;

    gc.gridx = 0;
    gc.gridy = 0;
    add(nameLabel, gc);

    gc.gridx = 0;
    gc.gridy = 1;
    add(passwordLabel, gc);

    /// Second column ///
    gc.anchor = GridBagConstraints.LINE_START;

    gc.gridx = 1;
    gc.gridy = 0;
    add(nameField, gc);

    gc.gridx = 1;
    gc.gridy = 1;
    add(passwordField, gc);

    /// Final row ///
    gc.weighty = 10;

    gc.anchor = GridBagConstraints.FIRST_LINE_START;

    gc.gridx = 1;
    gc.gridy = 2;
    add(addBtn, gc);
}

public void fireDetailEvent(DetailEvent event) {
    Object[] listeners = listenerList.getListenerList();

    for (int i=0; i < listeners.length; i += 2) {
        if (listeners[i] == DetailListener.class) {
            ((DetailListener)listeners[i+1]).detailEventOccured(event);
        }
    }
}

public void addDetailsListener(DetailListener listener) {
    listenerList.add(DetailListener.class, listener);
}

public void removeDetailListener(DetailListener listener) {
    listenerList.remove(DetailListener.class, listener);

}

單擊這段代碼中的登錄按鈕后,我需要關閉框架:

addBtn.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(java.awt.event.ActionEvent e) {
            String name = nameField.getText();
            String password = passwordField.getText();

            String text = name + ": " + password + "\n";

            System.out.println (text);
        }
    });

actionPerformed ,添加以下行以獲得並關閉父框架:

JFrame frame = (JFrame) SwingUtilities.getWindowAncestor(addBtn);
frame.dispose();// or frame.setVisible(false), depending on your needs

請注意,您必須將按鈕聲明為final才能在匿名偵聽器中使用它:

final JButton addBtn = new JButton("Submit");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM