закрытие моего jframe без использования кнопки закрытия (X) и прекращение работы JVM - PullRequest
2 голосов
/ 09 декабря 2008

У меня есть кадр, который создает экземпляр другого кадра, но я не хочу использовать кнопку закрытия (x) на созданном кадре. Поэтому я создал кнопку. Как мне написать, что эту кнопку можно использовать, чтобы закрыть созданный экземпляр кадра без выхода из JVM.

Ответы [ 6 ]

5 голосов
/ 10 января 2009

Наличие собственной кнопки закрытия - странный интерфейс, и его следует избегать.

Чтобы избавиться от рамки, когда нажата ваша собственная кнопка, вы можете просто сделать:

jFrame.setVisible(false);

или

jFrame.dispose();

если хочешь полностью от него избавиться.

В кадрах, которые вы не хотите выходить из JVM при нажатии кнопки закрытия, укажите:

jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

или

jFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

В зависимости от того, какое поведение вы хотите.

0 голосов
/ 16 июня 2014

Вы можете попробовать функции setVisible () или dispose ()

Для вашего основного класса ...

    public class Main {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    //new DemoTryCatch()
    new Frame1();
}

}

Для вашего первого класса кадра ...

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;


public class Frame1 extends JFrame{
JButton newFrame=new JButton("Frame 2");
public Frame1() {
    // TODO Auto-generated constructor stub
    super("Frame 1");
    add(newFrame);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(300,300);
    newFrame.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub
            new Frame2();\\instantiating your new Frame
        }
    });
}
}

Для созданного кадра ...

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;


public class Frame2 extends JFrame{

JButton CloseFrame2=new JButton("CloseFrame2");
public Frame2() {
    // TODO Auto-generated constructor stub
    super("Frame 1");
    add(CloseFrame2);
    setVisible(true);
    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    setSize(300,300);
    CloseFrame2.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            setVisible(false);\\You could also use dispose()
        }
    });
}
}
0 голосов
/ 31 января 2014

Я согласен с Томом, я думаю, что в коде вы записали:

[framename].setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

EXIT_ON_CLOSE означает, что приложение полностью выйдет из приложения.

Вы можете закрыть окно, нажав на кнопку X, используя:

[framename].setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

Вот пример кода:

package answers;

import javax.swing.JFrame;

public class Answers {

    public static void main(String[] args) {

        //frame 1
        JFrame frame1 = new JFrame("this is frame 1");
        frame1.setSize(500, 500);
        frame1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        frame1.setLocationRelativeTo(null); // ignore this its just to place frame 1 on the center

        //now this is the code for frame2
        //frame 2
        JFrame frame2 = new JFrame("this is frame 2");
        frame2.setSize(500, 500);
        frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        frame1.setVisible(true);
        frame2.setVisible(true);

    }

}
0 голосов
/ 22 октября 2013

Вы можете использовать setVisible(false), чтобы просто скрыть экземпляр JFrame от вида

0 голосов
/ 12 июля 2013

Я не уверен, что прав, но вы можете позвонить dispose(). Javadoc предполагает, что вы можете открыть его, используя show().

0 голосов
/ 16 ноября 2009

Используйте это:

jFrame.setUndecorated(true);
jFrame.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...