创建并循环遍历JScrollPane数组

时间:2017-04-23 06:23:36

标签: java swing jframe jpanel jscrollpane

我已经用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);
}

知道我在这里做错了什么以及如何解决它?我们非常感谢您的代码段。

0 个答案:

没有答案