关闭我的jframe而不使用close(X)按钮并终止JVM

时间:2008-12-09 18:16:52

标签: jframe

我有一个框架实例化另一个框架,但我不想在实例化框架上使用close(x)按钮。所以我创建了一个按钮。我怎么编码这个按钮可以用来关闭实例化的框架而不退出JVM。

6 个答案:

答案 0 :(得分:5)

拥有自己的关闭按钮是奇怪的用户界面,应该避免使用。

要在单击自己的按钮时删除框架,您可以执行以下操作:

jFrame.setVisible(false);

jFrame.dispose();

如果你想完全摆脱它。

在您不希望在单击的关闭按钮上退出JVM的帧上指定:

jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

jFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

取决于您想要的行为。

答案 1 :(得分:0)

使用此:

jFrame.setUndecorated(true);
jFrame.getRootPane().setWindowDecorationStyle(JRootPane.NONE);

答案 2 :(得分:0)

您可以使用setVisible(false)来隐藏来自视图的实例化JFrame

答案 3 :(得分:0)

我同意Tom的观点,我认为在您写下的代码中:

[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);

    }

}

答案 4 :(得分:0)

您可以尝试使用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()
        }
    });
}
}

答案 5 :(得分:-1)

我不确定我是否正确,但您可以致电dispose()。 javadoc建议您使用show()重新打开它。