Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从终止当前面板的另一个类(方法)的面板调用方法_Java_Swing_Class_Methods_Jpanel - Fatal编程技术网

Java 从终止当前面板的另一个类(方法)的面板调用方法

Java 从终止当前面板的另一个类(方法)的面板调用方法,java,swing,class,methods,jpanel,Java,Swing,Class,Methods,Jpanel,我有三个类{FirstFrame,Login,Register}。。。FirstFrame中有一种方法可以在Logi和Register FirstFramecode: public class FirstFrame extends javax.swing.JFrame { public FirstFrame() { initComponents(); setLayout(new BorderLayout()); changeTo(Login.class);

我有三个类{
FirstFrame,Login,Register
}。。。
FirstFrame
中有一种方法可以在
Logi
Register

FirstFrame
code:

public class FirstFrame extends javax.swing.JFrame {

public FirstFrame() {
    initComponents();
    setLayout(new BorderLayout());
    changeTo(Login.class);        
}

public void changeTo(Class<?> c){
    getContentPane().removeAll();
    try {
        Object obj = c.newInstance();
        getContentPane().add((Component) obj);
        pack();
        setVisible(true);
        System.out.println("here");
    } catch (InstantiationException ex) {
        Logger.getLogger(FirstFrame.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        Logger.getLogger(FirstFrame.class.getName()).log(Level.SEVERE, null, ex);
    }

}
}
公共类FirstFrame扩展了javax.swing.JFrame{
公共第一帧(){
初始化组件();
setLayout(新的BorderLayout());
更改为(Login.class);
}
公共无效更改为(c类){
getContentPane().removeAll();
试一试{
Object obj=c.newInstance();
getContentPane().add((组件)obj);
包装();
setVisible(真);
System.out.println(“此处”);
}catch(实例化异常){
Logger.getLogger(FirstFrame.class.getName()).log(Level.SEVERE,null,ex);
}捕获(非法访问例外){
Logger.getLogger(FirstFrame.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
Register
中,我有一个存储数据的按钮,然后返回到
Login
(假定)

如果我从
FirstFrame


这里的问题是如何从
寄存器内部调用
changeTo(Class c)

我能建议的最简单的解决方案是将
FirstFrame
的引用传递给
Register
Login
的构造函数;或者添加另一个并将其传递给该控制器

  • 使用a来帮助您进行交换,因为这正是它的用途
  • 给FirstFrame一个公共方法,允许其他类交换
  • 将FirstFrame的实例传递给需要调用此方法的对象。这可以通过构造函数或setter方法参数完成
  • e、 g


    这就是我在-@装满鳗鱼的气垫船-和-@艾略特·弗里希-@的简单想法的帮助下所做的:

    public class FirstFrame extends javax.swing.JFrame {
    
    
    JPanel cards;
    
    public FirstFrame() {
        initComponents();
    
        cards = new JPanel(new CardLayout());
    
        cards.add(new Login(), "login");
        cards.add(new Register(this), "reg"); //Passing the FirstFrame instance here
    
        setLayout(new BorderLayout());
        add(cards);
    
        changeCard("login"); // Switching Cards
    
        setLocationByPlatform(true);
    
        setVisible(true);
    }
    
    public void changeCard(String cName){
        CardLayout cl = (CardLayout) cards.getLayout();
        cl.show(cards, cName);
    
        pack();
    }
    }
    
    至于注册类别:

    public class Register extends javax.swing.JPanel {
    
    FirstFrame firstf;
    
    public Register(FirstFrame ff) {
        initComponents();
        firstf = ff;
    }
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)  {                                         
        firstf.changeCard("login");
    
    }     
    
    }
    

    @peeskillet谢谢你的高亮度照明:)是的,你我的朋友是一个节约一天的人:D。。。或者我应该说“夜间储蓄”(这里是凌晨4:40:P)非常感谢:)还有一件事。。。这没有关系。。。但是当面板发生变化时(它们的大小不同),
    pack()
    方法不打包:D。。。如有任何想法或参考,将不胜感激:)
    public class Register extends javax.swing.JPanel {
    
    FirstFrame firstf;
    
    public Register(FirstFrame ff) {
        initComponents();
        firstf = ff;
    }
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)  {                                         
        firstf.changeCard("login");
    
    }     
    
    }