在java中单击按钮时打开相同的帧

时间:2017-06-06 05:04:40

标签: java swing jframe

我更新了代码,因为许多人不理解,所以写一个简单的表示。 这是问题,每当我点击按钮它打开一个新的框架,但我不希望这不打开一个新的框架,它保持打开相同的框架。

主框架代码:

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class JavaProject2_27 {

    private JFrame frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    JavaProject2_27 window = new JavaProject2_27();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public JavaProject2_27() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JButton btnClicked = new JButton("Clicked");
        btnClicked.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                JavaProject2_28 obj=new JavaProject2_28();
                obj.getJavaProject2_28();
            }
        });
        btnClicked.setBounds(150, 99, 89, 23);
        frame.getContentPane().add(btnClicked);
    }
}

第二帧的代码:

import java.awt.EventQueue;

import javax.swing.JFrame;

public class JavaProject2_28 {

    private JFrame frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    JavaProject2_28 window = new JavaProject2_28();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public JavaProject2_28() {
        initialize();
    }

    public void getJavaProject2_28()
    {
        frame.setVisible(true);
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

snapshot

2 个答案:

答案 0 :(得分:0)

我正在检查您之前的程序,仍然无法在您提供的这三个类中找到getDataJavaProject2_23();方法的实现。

首先回答你提出的问题:

  1. 使用正确的命名约定,例如:JavaProject2_28如果你在一两个星期之后看一下,这个类名对我们甚至对你都没有任何意义。
  2. 您可以将程序划分为更多类,例如:数据库数据处理,GUI等。
  3. 另一个重要的事情是一个应用程序的多个JFrame不好,因为即使你在运行你的程序时查看你的任务栏你可以看到有多个图标,很难处理你的应用。对此有更多的不满。 read this to get clear idea。您可以使用一个JFrame和多个JFrame来使用适当的布局,而不是多个JPanel
  4. 回答您的最新问题:

      

    每当我点击按钮时,它会打开一个新的框架,但我不想要这个   它没有打开一个新的框架,它仍保持打开相同的框架。

    我检查了你的程序它工作正常(按下按钮打开另一帧)。

    您可以进行一些不必要的更改:

    删除此功能

    public void getJavaProject2_28()
    {
        frame.setVisible(true);
    }
    

    并将frame.setVisible(true);添加到initialize()方法。

    <强>解决方案:

    frame.setVisible(true)添加到按钮操作。 如下所示:

            }
        });
        btnClicked.setBounds(150, 99, 89, 23);
        frame.getContentPane().add(btnClicked);
        frame.setVisible(true);
    }
    

    在主框架(添加按钮按钮)中更改如下:

    JButton btnClicked = new JButton("Clicked");
    btnClicked.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            JavaProject2_28 obj=new JavaProject2_28();
        }
    });
    

    如果您只在主框架按钮中打开第二个main(),则两者都不需要JFrame方法。

答案 1 :(得分:0)

我解决了它请看一下: 家长班:

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class ParentClass {

    private JFrame frame;
    private int Count;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ParentClass window = new ParentClass();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public ParentClass() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JButton btnClicked = new JButton("Clicked");
        btnClicked.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent arg0) {
                Count++;
                System.out.println("Count = "+Count);
                if(Count==1)
                {
                    ChildClass obj=new ChildClass();
                    obj.ChildClassVisibility();
                }
            }
        });
        btnClicked.setBounds(150, 99, 89, 23);
        frame.getContentPane().add(btnClicked);
    }
}

ChildClass:

import java.awt.EventQueue;

import javax.swing.JFrame;

public class ChildClass {

    private JFrame frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ChildClass window = new ChildClass();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public ChildClass() {
        initialize();
    }

    public void ChildClassVisibility()
    {
        frame.setVisible(true);
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}