eclipse 如何使用Main类从项目中的其他类实现Swing组件?[关闭]

6rqinv9w  于 2023-03-22  发布在  Eclipse
关注(0)|答案(1)|浏览(105)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

15小时前关门了。
Improve this question
我正在开发一个项目,其中我有“Class1”,“Class2”和“Class3”。Class2和Class3都创建了JFrame,每个都包含各种JButton,JLabel和其他swing组件。我如何在Class1中实现这一点**我可以引用Class2中的JButton,并使用一个action listener将Class2的visibilty设置为false,将Class3的visibilty设置为true。
我试过这个:在我的main方法中将Class2设置为visbile没有问题,但是一旦我开始实现Class3,事情就不起作用了。
摘要:从其他类启动jbutton并使用引用该jbutton的操作侦听器存在问题。

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

@SuppressWarnings("serial")
public class Class1 extends JFrame implements ActionListener
{

    public static void main(String[] args) {
        Class2 frameFromclass2 = new Class2();

        frameFromclass2.setVisible(true);
    }       
    Class2 buttonMovetoclass3 = new Class2();

    public void actionPerformed(ActionEvent e) {

        if (buttonMovetoclass3 == e.getSource()) {   
            Class2 frameFromclass2 = new Class2();

            frameFromclass2.setVisible(false);

            Class3 frameFromclass3 = new Class3();

            frameFromclass3.setVisible(true);

                        
        }
    }   
    
}
nc1teljy

nc1teljy1#

你的问题的一部分是由于缺乏对变量作用域的理解而引起的,另一部分则是由于处理变量作用域的方法不正确。

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

@SuppressWarnings("serial")
public class Class1 extends JFrame implements ActionListener
{
    //This is a method. Every variable declared within this method, 
    //is only accessible from within this method. 
    public static void main(String[] args) {
        //That includes this one. 
        Class2 frameFromclass2 = new Class2();
        //You've used it here, but not only is it then abandoned, but it
        //cannot be used anywhere else. It is contained in a cage of curly braces. 
        frameFromclass2.setVisible(true);
    }       
    Class2 buttonMovetoclass3 = new Class2();

    public void actionPerformed(ActionEvent e) {

        if (buttonMovetoclass3 == e.getSource()) {   
            //Here you create a NEW Class2 object and give it the same
            //name you gave the other, then you hide it.
            Class2 frameFromclass2 = new Class2();

            frameFromclass2.setVisible(false);
            //And then you do the same thing here, but with Class3; then you show it. 
            Class3 frameFromclass3 = new Class3();

            frameFromclass3.setVisible(true);
        }
    }   
}

我们无法看到其他类的构造函数中有什么,所以我不能说是否也有问题发生。但是,我可以提供更好的替代方案。
通常情况下,您希望保留1个JFrame,即使您可以使用弹出窗口或多个“页面”。考虑使用多个JPanels,每个布局一个。或者您可以使用JTabbedPane,并且在每个选项卡上有不同的信息。出于登录目的,一个常见的选项是JOptionPaneJDialog。如果您坚持使用多个JFrames,并且希望在它们之间移动组件,则类中的变量(不是一个方法)应该用来存储信息,然后使用公共方法从其他类访问这些变量。你应该销毁它而不是隐藏它。这里有一个很好的资源,有各种方法可以做到这一点。

相关问题