我正在学习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
和menubar类:
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);
“add”带下划线,因此我无法编译代码。
我一直在寻找解决这个问题的方法,据我所知,这应该是可行的。
感谢您的帮助。
非常感谢。
乔什
我想你:
new menubar()
如果menubar.menubar()
是一个静态
函数menubar.menubar()
到返回菜单
否则,该方法只是一个昂贵的无操作content.add(menu.menuBar(),...)
有下划线,因为您不能使用space
方法作为另一个方法的参数。
此外,应该始终使用类而不是实例引用静态字段或方法。类名应该以大写字母开头(菜单
)。
而不是:
content.add(menu.menuBar(), BorderLayout.NORTH);
我想你是这个意思:
content.add(menubar.menuBar(), BorderLayout.NORTH);
...但这仍然不起作用,因为此方法的返回类型是void
。它必须是JMenuBar
。
请注意,menuBar()方法是一个void类型,因此没有返回任何值,而您使用的content(JPanel)的add()方法需要两个参数(JComponent type[注意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时,使用继承的概念(将menubar类扩展到JMenuBar,以便您的类可以像JMenuBar一样工作),而不是依赖组合的概念。您也可以按照上面的帖子来设置JMenuBar:
frame.setJMenuBar(menu.menuBar());
如果您是Java编程的新手,您需要开始练习Java编码标准,特别是类和方法的正确命名。类名称的第一个字母应大写,而方法名称上至少应有一个动词。:)
问题内容: 我在3个单独的类中有3个窗口,我想使用cardLayout,以便当你单击next按钮时,将出现下一个窗口。如何将包含不同元素的JPanels添加到一个cardLayout?这是第一个窗口:(尽管唯一的区别是背景-但它代表了我实际得到它的想法) 第二个窗口: 最后一个: 问题答案: 我做了一个小程序,希望程序中写的注释可以指导你了解如何使用CardLayout。
我想通过KeyClope对用户进行身份验证,但我需要向Spring Security使用的身份验证对象添加额外的角色。添加的角色保存在Postgres数据库中。 > @组件公共类Application AuthenticationProvider扩展KeycloakAuthenticationProvider{ } 尝试添加额外的过滤器,但我不确定正确的配置。 @豆子 }
我正在学习JSwing,我发现了GridBagLayout。 我试图创建一个简单的计算器,我添加了多个JPanel设置每个首选大小,但当我调整窗框大小时,面板也不会调整大小。然后我发现了Gridbag的布局。 但我得到的是:GridBagLayout的计算器错误 } 应该是这样的:正确的计算器 我试过: 要锚定。。。但它不起作用, 创建多个JPanel(一个带有GridLayout),但不起作用
我有以下组件,它主要依赖于react native的 我能够输入注释我自己的道具,但在上面的例子中抛出了一个错误 [flow]属性<代码>样式(在道具中找不到属性)常量样式:任意 我知道在typescript中,我可以将接口扩展到Image one,流程中是否有一些东西可以让我的道具以某种方式从继承所有类型?我如何从react native导入这些类型? 编辑我发现了一个叫做交叉点类型的概念,并尝
问题内容: 我想将背景图像添加到我的JFrame中,但是当我使用下面的代码进行操作时,我无法添加其他元素,例如JLabel或JTextField。 您能否告诉我是否还有另一种方法可以将JTabbedPane添加到具有背景的JFrame中? 谢谢。 问题答案: 像这样? 附录:“通常您会先调用,但是由于图像将覆盖整个背景,因此无需这样做。” — [camickr] 如果仅创建自定义UI来添加背景图像
我有以下情况。JDK 17,Spring-Boot:2.6.2。一个gradle多项目。一个项目是一个库(java-Library,没有Spring启动插件)。另一个项目是带有Spring启动插件的Spring启动应用程序。一般不使用Spring依赖管理插件,而是使用gradle平台概念。应用程序项目包括每个“实现(项目(':...” 图书馆: 库项目和spring boot应用程序项目有不同的包