java - 从另一个类添加 Swing 组件

标签 java swing class

我正在学习 java,我正在尝试从另一个类向我的框架添加一个菜单栏(练习将代码分成多个类以更好地组织程序)。

这是我的代码示例:

public class MainApp {

public static void main(String[] args) {
    // Create window
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.setSize(600, 400);

    // Create main panel
    JPanel content = new JPanel();
    content.setLayout(new BorderLayout());
    frame.add(content);

    //Create menu bar
    menubar menu = new menubar();
    content.add(menu.menuBar(), BorderLayout.NORTH);
            //Other stuff...

} // Ends main method
} // Ends MainApp class

还有菜单栏类:

public class menubar {
public static void menuBar(){
    JMenuBar menu = new JMenuBar();
    JMenu file = new JMenu("File");
        JMenuItem clear = new JMenuItem("New");
        JMenuItem exit = new JMenuItem("Exit");
    JMenu help = new JMenu("Help");
        JMenuItem about = new JMenuItem("About");
        JMenuItem instructions = new JMenuItem("Instructions");
} // Ends method menuBar
} // Ends class menubar

我用的是eclipse,在一行中:

content.add(menu.menuBar(), BorderLayout.NORTH);

“添加”带有下划线,因此我无法编译代码。

我一直在寻找解决这个问题的方法,据我所知这应该可行。

感谢任何帮助。

谢谢

乔希

最佳答案

请注意,您的 menuBar() 方法是 void 类型,因此没有返回任何值,而内容的 add() 方法( JPanel)您使用的需要两个参数,它们是(JComponent 类型[注意 JMenuBar 是 JComponent 的子类],int [用于布局目的])

content.add(menu.menuBar(), BorderLayout.NORTH);

下面是您的代码的快速修复:

public class menubar {
public static JMenuBar menuBar(){
    JMenuBar menu = new JMenuBar();
    JMenu file = new JMenu("File");
        JMenuItem clear = new JMenuItem("New");
        JMenuItem exit = new JMenuItem("Exit");
    JMenu help = new JMenu("Help");
        JMenuItem about = new JMenuItem("About");
        JMenuItem instructions = new JMenuItem("Instructions");
    return menu;
} // Ends method menuBar
} // Ends class menubar

我对您的建议是在处理 Java 中的 GUI 而不是依赖于组合的概念时,使用继承的概念(将菜单栏类扩展到 JMenuBar 以便您的类可以像 JMenuBar 一样工作)。您也可以按照上面的帖子设置 JMenuBar:

frame.setJMenuBar(menu.menuBar());

如果您是 Java 编程的新手,则需要开始练习 Java 编码标准,尤其是类和方法的正确命名。类名的第一个字母应该大写,而你的方法名应该至少有一个动词。 :)

关于java - 从另一个类添加 Swing 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18934783/

相关文章:

java - 在 Jframe 中绘制一个圆

java - JTable网格线隐藏后显示

java - 删除所有行然后重新加载 JTable 中的行会导致 getSelectedRow 返回 -1

c++ - () 和 = 在创建类实例时有什么区别?

java - 从文件中读取数据并存储在两个数组中

java - 在响应中发送包含 blob 的实体对象

c++ - 访问类内部函数的参数

c++ - 哪个更快?类函数还是带类指针的函数?

java - 如何从 Android 中的 BroadcastReceiver 调用 onPrepareOptionsMenu() ?

java - 获取/返回MongoDb中新插入或新修改的文​​档(使用java驱动程序)