关闭内部带有 JInternalFrame 的 JtabbedPane

Close a JtabbedPane with JInternalFrame Inside

单击此表单中的按钮时,如何关闭包含 JInternalFrameJTabbedPane

我的项目有 3 个 JForms、1 个 TabbedPane、1 个 JInternalFrame 和 1 个 Main window(用于注册数据)。要创建我的 JTabbedPanes,我使用 addTab() 方法,从该表单我有关闭按钮,它调用另一个 window(主注册表),我使用 dispose()setVisible(false)方法,但它们什么都不做。

一个例子(有 3 个类 -Administrador、-MenuPrincipal、-ventanaRegistro):

首先 Class 一个 JFrame,然后是一个 JTabbedPane(这是我创建选项卡的地方)

public class MenuPrincipal extends javax.swing.JFrame 
{

    Administrador ventanaAdministrador = new Administrador();

    void showTabs()
    {
        JTabbedPane.addTab("Administrador", ventanaAdministrador);
    }

    public MenuPrincipal() 
    {
        initComponents();
        showTabs();
    }
}

第二个 Class 一个带有单个按钮的 JInternalFrame

public class Administrador extends javax.swing.JInternalFrame 
{
    void showAdminWindow()
    {
        ventanaRegistro ventanaRegistro = new ventanaRegistro();
        ventanaRegistro.setVisible(true); 
    }

    void closeThisWindow()
    {
        this.dispose();
    }
    public Administrador() 
    {
        initComponents();
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)    {                                         
        showAdminWindow();
        closeThisWindow();
    }
}

第三个Class一个简单的JFrame。这只是注册数据的代码。

真正的问题是我的方法 closeThisWindow() 没有关闭第二个 Jtabbed window,我想在单击按钮(位于 JTabbedPane 上)时第三个 class 可见,第二个 Class invisible/Close 可见。

查看以下代码是否符合您的预期。如果没有请详细说明,以便我可以改进我的答案。

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.WindowConstants;


public class MenuPrincipal extends javax.swing.JPanel {

    Administrador ventanaAdministrador = new Administrador();

    public MenuPrincipal()

    {
        setPreferredSize(new Dimension(290, 200));

        JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
        ventanaAdministrador.setPreferredSize(new Dimension(350, 100));
        tabbedPane.addTab("Admin", ventanaAdministrador);
        tabbedPane.addTab("2nd Tab", new JPanel());
        add(tabbedPane);
    }


    /**
     * @param args
     */
    public static void main(String[] args) {

        JFrame testFrame = new JFrame("Main Test Window");
        testFrame.setDefaultCloseOperation(WindowConstants.
                     DISPOSE_ON_CLOSE);
        testFrame.setPreferredSize(new Dimension(450, 350));
        MenuPrincipal menuP = new MenuPrincipal();
        testFrame.getContentPane().add(menuP);

        testFrame.pack();
        testFrame.setVisible(true);

    }
}

并且:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class Administrador extends javax.swing.JInternalFrame {

  void showAdminWindow()
  {
    JFrame ventanaRegistro = new JFrame("Admin Window");
    ventanaRegistro.
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

    ventanaRegistro.setPreferredSize(new Dimension(350, 200));
    ventanaRegistro.pack();
    ventanaRegistro.setVisible(true);
  }

  void closeThisWindow()
  {
    Window window = SwingUtilities.getWindowAncestor(this);
    window.dispose();
  }

  public Administrador()
  {

    JPanel panel = new JPanel();
    getContentPane().add(panel, BorderLayout.NORTH);

    JButton closeWindowBttn = new JButton("Close Window and open a new  one");
    closeWindowBttn.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            closeWindowActionPerformed();
        }
     });
     panel.add(closeWindowBttn);
  }

  private void closeWindowActionPerformed()    {
    showAdminWindow();
    closeThisWindow();

 }

}