Hola dalbin_j.
Seria algo asi:
Principal.java
Código:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Principal extends JFrame
{
// Variables de Instancia
private int x;
JDesktopPane escritorio = new JDesktopPane();
JButton abrir = new JButton ("Abrir");
Interno1 in;
//Constructor de la clase principal
public Principal()
{
super("Calculador de Raspawn");
this.setSize(800, 600);
setResizable(false);
setLayout(null);
Dimension pantalla, cuadro;
pantalla = Toolkit.getDefaultToolkit().getScreenSize();
cuadro = this.getSize();
this.setLocation(((pantalla.width - cuadro.width) / 2), (pantalla.height - cuadro.height) / 2);
setLayout(null);
setContentPane(escritorio);
abrir.setBounds(10, 10, 100, 20);
add(abrir);
abrir.addActionListener (new ActionListener()
{
public void actionPerformed (ActionEvent evt)
{
creaventana();
}
}
);
in = null;
}
/*Creación de la clase para crear la ventana interna*/
public void creaventana (){
if(in == null || in.isClosed()){
in = new Interno1();
in.setVisible(true);
System.out.println(in.isEnabled());
escritorio.add(in);
try
{
in.setSelected(true);
}
catch(Exception e)
{
}
//abrir.setEnabled(false);
repaint();
}
else{
System.out.println("La ventana ya se encuentra abierta.");
}
}
public static void main (String [] args)
{
Principal p = new Principal ();
p.setVisible(true);
p.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent evt)
{
System.exit(0);
}
}
);
}
}
lo que hice fue:
Declarar el objeto in de la clase Interno1 como global y en el constructor lo seteo a null.
en el evento del boton verifico si sigue siendo null o si ya se ha cerrado para poderlo instanciar de nuevo y abrir la ventana interna.
Espero que eso sea lo que buscabas.