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");
}
}