gpt4 book ai didi

java - 调用另一个类中的函数

转载 作者:行者123 更新时间:2023-12-02 10:39:33 26 4
gpt4 key购买 nike

您好,我面临这个问题:

我在 Launcher 类中创建了一个按钮,当我单击它时,我想调用另一个类(Main)中的函数,但没有结果。但是,当我在运行模式下定义(主)类时,我得到了预期的结果。问题是什么 ?

这对我有用: When i set Main.class in run mode

这不起作用:/: When i click in button to show Main.class

这是可运行类(Luncher)的代码:

public class Luncher extends javax.swing.JFrame {

public Luncher() {

setSize(600,400);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
JButton jButton1 = new javax.swing.JButton();
jButton1.setText("CLIC ON ME !");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Main example = new Main();
example.doThis();
}
});

GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(147, 147, 147)
.addComponent(jButton1)
.addContainerGap(180, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(108, 108, 108)
.addComponent(jButton1)
.addContainerGap(169, Short.MAX_VALUE))
);


}


public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Luncher().setVisible(true);

}
});
} }

第二个类是Main:

public class Main extends javax.swing.JFrame {

private static GUI gameGui = new GUI(); //GUI its a JFrame class
private static CardLayout card = new CardLayout();
private static JPanel content = new JPanel();

public Main(){
doThis();

}


public static void doThis (){
content.setLayout(card);
gameGui.setVisible(true);
gameGui.add(content);
gameGui.repaint();
gameGui.revalidate();
card.show(content);
}


public static void main (String [] args) {


} }

最佳答案

您有一些可用的基本解决方案。

你可以...

Main 的引用传递给 Luncher。这样,当您需要时,您只需调用您需要的 Main 功能即可。

这不是最好的解决方案,因为它将 Launcher 耦合到 Main,使得重用代码变得困难,并可能暴露 (Main) 的功能) 到 LauncherLauncher 应该有权访问。

你可以...

您可以使用委托(delegate)或观察者模式...

定义一个接口(interface)(或契约),Launcher需要委托(delegate)来实现该接口(interface),以便执行其所需的功能。

public interface LauncherDelegate {
//...
}

然后您将让 Main 实现此接口(interface)

public class Main extends javax.swing.JFrame implements LauncherDelegate {
//...

并将其自身的引用传递给Launcher

public class Luncher extends javax.swing.JFrame {
private LauncherDelegate delegate;
public Luncher(LauncherDelegate delegate) {
this.delegate = delegate
//...

这样,Launcher只能调用合约中描述的功能,它解耦了代码,因为可以使用LauncherDelegate的任何实现,并且Launcher 不会在意,这使得代码更具可重用性和可配置性。

关于java - 调用另一个类中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53023882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com