gpt4 book ai didi

java - 为我的扩展 Pane (键)到框架标题(值)制作 map

转载 作者:行者123 更新时间:2023-12-01 15:16:27 25 4
gpt4 key购买 nike

我希望我的框架在更改 Pane 时更改标题:

public void changePane(JPanel myNewPane){
myGui.getContentPane().removeAll();
myGui.getContentPane().add(myNewPane);
--->myGui.setTitle("Blah");
myGui.pack();
}

除了我想使用输入 myNewPane 作为 map 中值的键来更改 "Blah" 的值,因此我有:

    private Map<? extends JPanel,String> PanelNames = new HashMap<? extends JPanel, String>();

异常(exception),在 Eclipse 中,HashMap 带有红色下划线,并带有错误“无法实例化类型 HashMap”

我尝试将 Pane 和字符串添加为键和值,如下所示:

public void setPanelNames(Map<? extends JPanel,String> panelNames) {
PanelNames.put(myTopManagerPane, "Main Manager Page");
PanelNames.put(myPlayerManagerPane, "Player Manager Page");
PanelNames.put(myGameManagerPane, "Game Manager Page");
}

这里put是红色下划线的;我的错误是“Map 类型中的方法 put(capture#2-of ? extends JPanel, String) 不适用于参数 (TopManagerPane, String)”

我做错了什么?

最佳答案

您无法创建 HashMap使用泛型通配符。您需要指定具体类型。

删除? extends根据您的定义,它应该有效:

private Map<JPanel,String> PanelNames = new HashMap<JPanel, String>();

public void setPanelNames(Map<JPanel,String> panelNames) {
...
}

请注意Map<? extends JPanel, String>意味着您接受任何使用 JPanel 类型的键的映射。或子类(例如 MyPanel 如果它扩展 JPanel )。但是,您在调用 new HashMap<...>() 时创建的实际实例需要知道是否有JPanel或仅 MyPanel允许实例,因此您需要使用 new HashMap<JPanel, String>()这里。然后 map 就知道键是 JPanels并且无法了解有关类型的更多信息(在这种情况下并不重要)。

在方法参数中,使用? extends JPanel意味着你可以通过 Map<JPanel, String>Map<MyPanel, String>但编译器不会让您向 map 添加面板,因为它不知道是否允许这样做 - 添加 JPanelsMap<MyPanel, String>是非法的。

关于java - 为我的扩展 Pane (键)到框架标题(值)制作 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526167/

25 4 0
文章推荐: java - 无法绕过 ClassCastException
文章推荐: java - 如何最小化(图标化)FXML应用程序?
文章推荐: javascript - 修复
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com