JButton 位于单独的类文件中

kry*_*huq 2 java swing class jbutton

我编写了包含简单 JFrame 的类,我想将其他类的按钮添加到此 JFrame

当我尝试写作时

panel.add(new CancelButton())
Run Code Online (Sandbox Code Playgroud)

我收到错误:LoginWindow.java:29: 错误:没有找到适合 add(CancelButton) 的方法

你能帮我吗?

import javax.swing.*;
import java.awt.*;


public class LoginWindow {

public LoginWindow(){

//Login Window
JFrame frame = new JFrame("Movie date base");
frame.setSize(500,500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//label
JLabel label = new JLabel("Welcom to Movie Date Base! ");
label.setFont(new Font("Verdana", Font.PLAIN, 18));
//panel
JPanel panel = new JPanel(new GridBagLayout());
JPanel panel1 = new JPanel(new GridBagLayout());
//add panel to the frame
frame.add(panel);
frame.getContentPane().add(panel, BorderLayout.NORTH);
frame.getContentPane().add(panel1, BorderLayout.SOUTH);

//Grid layout
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(100,10,10,10);
panel.add(label,c);

   }
}

import javax.swing.*;

public class CancelButton {
public CancelButton(){

JButton cancel = new JButton("cancel");

  }

}
Run Code Online (Sandbox Code Playgroud)

Kev*_*man 5

如果您想将 CancelButton 类视为 JButton,那么它必须扩展 JButton。

public class CancelButton extends JButton{
   public CancelButton(){
      //call the parent-level constructor
      super("cancel");

  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我在这里删除了您的取消变量,因为您的 CancelButton 类现在是一个JButton。您可以在任何可以使用 JButton 的地方使用它。

但是,如果您想在其他类中使用 cancel 变量,那么您需要为其创建某种 getter 函数:

public class CancelButton {

   JButton cancel;

   public CancelButton(){
      cancel = new JButton("cancel");
   }

   public JButton getButton(){
      return cancel;
   }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以调用 getButton() 函数,如下所示:

panel.add(new CancelButton().getButton())
Run Code Online (Sandbox Code Playgroud)

您采用哪种方法实际上取决于您想要做什么以及您想要如何组织代码。