我已经用Google搜索了这一点,互联网上没有类似于我尝试做的事情。我现在正在考虑是否以正确的方式处理这个问题,因为我花了很多时间来解决它。
这是我尝试做的事情。我有一个JFrame,我在框架的左边分配了一个JTabbedMenu。当我点击菜单项时,它会在右侧显示相关的JPanel。
要在左侧菜单上创建选项卡,我循环浏览HashMap,如下所示:
for (Entry<String, AbstractBasePanelView> menu : menuItems.entrySet()) {
addTab(menu.getKey(), menu.getValue());
}
menuItems HashMap的构造如下:
for (Menu menu : Menu.values()) {
menuItems.put(menu.getName(), Menu.lookup(menu.getName()).getInstance());
}
其中Menu是一个Enum类,getInstance()方法返回一个扩展AbstractBasePanelView的类的新实例。 AbstractBasePanelView类扩展了JPanel。
现在我的问题是如何将JScrollPane添加到右侧的每个面板中。这样它只为JPanel显示一个垂直滚动条,其中该Panel的元素超出了JFrame的维度。
当我创建标签时,我认为我可以做这样的事情:
JScrollPane[] scrollPane = new JScrollPane[menuItems.size()];
int i = 0;
for (Entry<String, AbstractBasePanelView> menu : menuItems.entrySet()) {
scrollPane[i].getViewport().add(menu.getValue());
addTab(menu.getKey(), scrollPane[i]);
++i;
}
但是一旦我运行我的应用程序,我就会收到运行时异常:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
添加JPanel时会抛出异常: scrollPane [i] .getViewport()。add(menu.getValue());
当我不使用JScrollPane数组时,我不会得到任何NullPointerException。
以下工作正常,但没有解决我的目的,因为左侧菜单显示正常,但JPanels都是空的。
for (Entry<String, AbstractBasePanelView> menu : menuItems.entrySet()) {
JScrollPane scrollPane = new JScrollPane();
scrollPane.getViewport().add(menu.getValue());
addTab(menu.getKey(), scrollPane);
}
知道我在这里做错了什么以及如何解决它?我们非常感谢您的代码段。