如何从另一个类调用setVisible?

时间:2016-06-06 18:26:29

标签: java swing jframe

我有什么: 两个实例化两个JFrame的类。

我想要实现的目标: 一个带按钮,另一个按钮在按钮上触发动作时将变为不可见。

问题: 我不知道如何追求这个。我该怎么做呢?

1级

public class test1{
    public static void main(String[] args){
        JFrame frame = new JFrame("Blinkly Frame"); 

        frame.setSize(100, 100); 
        frame.setVisible(true); 
    }
}

2级

public class test2{
    public static void main(String[] args){
         JButton button = new JButton();
        //when i will click this button i want to make invisible frame
    }
}

1 个答案:

答案 0 :(得分:1)

<强>解决方案: 创建具有Jframe或扩展JFrame的类的实例。

首先我们需要消失的JFrame。

public class BClass extends JFrame{ 
    // Disappearing frame
    public BClass()
    {
        this.setSize(300,300);//sets frame properties
        this.setLocationRelativeTo(null);
    }
}

接下来我们需要按住按钮的框架。 (添加了文档)

public class ACLass {

public static void main(String[] args) {

    JFrame frame = new JFrame("Magician"); // instantiates 
    BClass b = new BClass(); // instantiates class that extends JFrame

    b.setVisible(true);//
    frame.setSize(300,300);//
    frame.setVisible(true);//
    frame.setLocationRelativeTo(null);//

    JButton disappearButton = new JButton("Disappear"); //Adds button
    disappearButton.addActionListener(new ActionListener() { // Adds action -When button is "clicked"

        public void actionPerformed(ActionEvent e) { // method called when action fired
            b.setVisible(false); //visibility changed
        }
    });
    disappearButton.setBounds(0,0,300,150);

    JButton appearButton = new JButton("appear"); //Adds button
    appearButton.addActionListener(new ActionListener() { // Adds action -When button is "clicked"

        public void actionPerformed(ActionEvent e) { // method called when action fired
            b.setVisible(true); //visibility changed
        }
    });
    disappearButton.setBounds(0,100,300,150);

    frame.add(disappearButton, BorderLayout.PAGE_START); //adds button to frame
    frame.add(appearButton, BorderLayout.PAGE_END); //adds button to frame
 //I used border layout however use the a layout manager that works with your components/frame

}

}

异国情调说明

我将用魔术表演解释这一点,因为它提供了更好的理解。 首先,我们有一个魔术师(JFrame)和他的魔杖(JButton),然后我们有助手(第二个JFrame)将消失,一个阶段已经设置(所有属性定义等)。

首先,魔术师为魔杖添加了一些神奇的力量(处理被按下按钮的actionListener),当魔术师挥动它时会做出反应(动作按下a.k.a按钮被按下)。

接下来,我们向观众展示帮助者(实例化JFrame消失)。 当我们向观众展示助手时,我们现在可以显示他/她消失(现在我们可以通过类的实例变量调用setVisible)。

最后,魔术师挥动他的魔杖(发射动作),助手获得信号(actionPerformed方法)消失。然后帮助者可以调用

b.setVisible(false); //making the frame invisible

一般说明

https://docs.oracle.com/javase/tutorial/java/javaOO/usingobject.html

基本上,通过在另一个类中实例化一个对象,你也可以调用该类中的对象方法,即setVisible(boolean b)。

其他不太优选的解决方案: 如果你的消失类没有扩展JFrame但是实例化了一个.. 您需要创建一个实例变量

private JFrame j; 

然后使用getter / setters访问该对象,然后允许您调用其方法。

secondClass.getFrame().setVisible(true);//getFrame returns the JFrame

然后将其添加到actionPerformed方法。

您还可以使用静态实例变量并在actionPerformed方法中静态引用它...(不推荐)

secondClass.frame.setVisible(true);