2013-06-18 4 views
0

Я пытаюсь открыть новый кадр, который называется stage2 при закрытии основной рамки. но когда я помещаю main.setVisible (false), там сказано, что это не охватывающий класс, и я помещаю этот слушатель в класс jpanel, который вызывается мейнфреймом. поэтому его внешний вид, как это ..закрыть jframe при открытии нового

class main extends JFrame() 
{ 
    main() 
    { 
    } 
    add(story2) 
} 

class story2 extends JPanel() 
{ 
    public void mouseClicked(MouseEvent e) 
      { 

       new stage2(); 
       main.this.setVisible(false); 
      } 
} 

ответ

0

Это потому, что story2 действительно не внутренний класс main. Вы должны использовать JComponent's getTopLevelAncestor(), чтобы получить дескриптор JFrame story2, а затем выполните то, что вы хотите с помощью JFrame. Что-то вроде этого:

((JFrame)this.getTopLevelAncestor()).dispose(); 

(. Если вы не будете нуждаться в main JFrame любой больше, то лучше использовать dispose() чем просто setVisibke(false), для того, чтобы освободить ресурсы и память)

выше образца кода - это просто демонстрация. В готовом к производству приложении вы должны, конечно, сначала проверить, что предка верхнего уровня можно отнести к JFrame (или, по крайней мере, к окну).

+0

thx этот 1 рабочий – user2495627

Смежные вопросы