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_Oop_Methods - Fatal编程技术网

Java 有没有办法在类之间使用方法?

Java 有没有办法在类之间使用方法?,java,swing,class,oop,methods,Java,Swing,Class,Oop,Methods,我在同一个包中有两个.java文件。我计划将第一个.java文件作为底层代码,将第二个.java文件作为GUI swing界面 我遇到的问题是,在处理项目的GUI部分时,我需要使用代码从.java文件访问几个方法。我的.java文件及其代码如下所示: package same; public class HFSim extends ApplicationTemplate { private static class AppFrame extends Appli

我在同一个包中有两个.java文件。我计划将第一个.java文件作为底层代码,将第二个.java文件作为GUI swing界面

我遇到的问题是,在处理项目的GUI部分时,我需要使用代码从.java文件访问几个方法。我的.java文件及其代码如下所示:

    package same;
    public class HFSim extends ApplicationTemplate
   {
       private static class AppFrame extends ApplicationTemplate.AppFrame
          {

             public myMethodIWanttoUse()
                  {
                     //code
                  }
在我的GUI.java中:

    package same;
    public class GUI extends JFrame
     {
       public GUI()
         {
           public void actionPerformed(ActionEvent e) 
            {
                 //this is where I want to use the method from above

有没有办法在GUI部分使用该方法?还是有更好的方法来解决这个问题?提前感谢。

通过替换

public myMethodIWanttoUse()

其次,将
AppFrame
标记为
public
,而不是
private

然后像这样调用您的方法
HFSim.AppFrame.mymethodiWantouse()

编辑:

或者,您不必使方法
成为静态的
。只需在GUI代码中添加以下内容:

HFSim.AppFrame frame = new HFSim.AppFrame();
frame.myMethodIWantToUse();

不过,无论如何,您必须通过替换使
AppFrame
成为
public
使
methodiWantouse()
静态

public myMethodIWanttoUse()

其次,将
AppFrame
标记为
public
,而不是
private

然后像这样调用您的方法
HFSim.AppFrame.mymethodiWantouse()

编辑:

或者,您不必使方法
成为静态的
。只需在GUI代码中添加以下内容:

HFSim.AppFrame frame = new HFSim.AppFrame();
frame.myMethodIWantToUse();

不过,无论如何,您都必须将
AppFrame
公开化

您的问题有多种解决方案。您应该回答的第一个问题是,您需要如何调用这些方法来限定它们自己

  • 它们是实用方法吗?(它们不需要处理对象的实例)
  • 它们是否附着到对象的单个实例
  • 您是否需要调用特定对象的方法而不仅仅是方法
您可以:

  • 声明它们
    static
    并调用它们,例如
    HFSim.AppFrame.MyMethodoiWantouse()

  • 声明包含它们的对象的静态实例,例如

    public class HFSim extends ApplicationTemplate {
      public static final AppFrame appFrame = new AppFrame();
      ...
    }    
    
    public class GUI extends JFrame {
      public GUI() {
        public void actionPerformed(ActionEvent e) {
          HFSim.appFrame.myMethodIWanttoUse();
        }
      }
    }
    
  • 将对象的实例传递给另一个实例:

    public class GUI extends JFrame {
      private final HFSim.AppFrame appFrame;
    
      public GUI(HFSim.AppFrame appFrame) { this.appFrame = appFrame; }
    
      public void actionPerformed(ActionEvent e) {
        appFrame.myMethodIWanttoUse();
      }
    }
    

您的问题有多种解决方案。您应该回答的第一个问题是,您需要如何调用这些方法来限定它们自己

  • 它们是实用方法吗?(它们不需要处理对象的实例)
  • 它们是否附着到对象的单个实例
  • 您是否需要调用特定对象的方法而不仅仅是方法
您可以:

  • 声明它们
    static
    并调用它们,例如
    HFSim.AppFrame.MyMethodoiWantouse()

  • 声明包含它们的对象的静态实例,例如

    public class HFSim extends ApplicationTemplate {
      public static final AppFrame appFrame = new AppFrame();
      ...
    }    
    
    public class GUI extends JFrame {
      public GUI() {
        public void actionPerformed(ActionEvent e) {
          HFSim.appFrame.myMethodIWanttoUse();
        }
      }
    }
    
  • 将对象的实例传递给另一个实例:

    public class GUI extends JFrame {
      private final HFSim.AppFrame appFrame;
    
      public GUI(HFSim.AppFrame appFrame) { this.appFrame = appFrame; }
    
      public void actionPerformed(ActionEvent e) {
        appFrame.myMethodIWanttoUse();
      }
    }
    

“您需要调用特定对象的方法而不仅仅是方法吗?”…什么?哪些“特定对象的方法”是“不仅仅是方法”?@AndrewThompson:它的意思是标记对特定给定对象调用方法(这是先验的)与对任何给定对象调用方法(可能不同)之间的区别。这两种选择都需要不同级别的封装,才能在灵活性和简单性之间获得最佳的折衷。这种解释应该是正确的!“除了方法之外,您还需要调用特定对象的方法吗?”…什么?哪些“特定对象的方法”是“不仅仅是方法”?@AndrewThompson:它的意思是标记对特定给定对象调用方法(这是先验的)与对任何给定对象调用方法(可能不同)之间的区别。这两种选择都需要不同级别的封装,才能在灵活性和简单性之间获得最佳的折衷。这种解释应该是正确的!使用
static
通常是GUI设计不佳的标志。使用
static
通常是GUI设计不佳的标志。