Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JComboBox+JPA_Java_Swing_Jpa_Jcombobox - Fatal编程技术网

Java JComboBox+JPA

Java JComboBox+JPA,java,swing,jpa,jcombobox,Java,Swing,Jpa,Jcombobox,考虑到Java持久性API和JComboBox,我目前陷入了一个Java问题 问题如下: 我有一个JDialog,我用它向数据库中添加一些东西 他认为: cbGenre = new JComboBox(); cbPublisher = new JComboBox(); 我想要的是,在这两个组合框中,从列表或ArrayList中加载值。 据我所知,标准是一个只接受字符串数组的组合框。我还发现了一个使用ArrayList的示例,我可以和他一起工作 现在的主要问题是: 我有两个表,只列出重要的列:

考虑到Java持久性API和JComboBox,我目前陷入了一个Java问题

问题如下:

我有一个JDialog,我用它向数据库中添加一些东西

他认为:

cbGenre = new JComboBox();
cbPublisher = new JComboBox();
我想要的是,在这两个组合框中,从列表或ArrayList中加载值。 据我所知,标准是一个只接受字符串数组的组合框。我还发现了一个使用ArrayList的示例,我可以和他一起工作

现在的主要问题是:

我有两个表,只列出重要的列:

games
id pk int
genre int

genre
id pk int
name varchar
他们通过JPA以M:1的关系进行连接

所以一个游戏只能有一种类型 一种类型可以有一个或多个游戏

如何将检索到的流派名称添加到相应的组合框中,当我按下保存按钮时,检索组合框中名称的id和该名称的id

这是通过ArrayList实现的,还是JCombobox不允许值对? 我这样做的原因是,当我将游戏保存到数据库中时,我需要选择类型id并将其添加到数据库中,显然,用户不应该看到id,而应该看到动作或RPG等等

对不起,如果我的问题有点不清楚。如果是,请告诉我,以便我能更好地解释

英语不是我的母语,你现在可能已经注意到了:


感谢阅读,我希望能尽快找到解决方案。与此同时,我将通过谷歌浏览更多的内容,一个组合框可以接受任何类型的对象。为了显示它们的值,它使用对象的tht toString方法。因此,您可能有以下代码:

@Entity
public class Genre {
    // fields and methods

    @Override 
    public String toString() {
        return this.name;
    }
}

// in your GUI
List<Genre> genres = findAllGenresSortedByName();
this.cbGenre = new JComboBox(genres.toArray());
// ...
Genre selectedGenre = (Genre) this.cbGenre.getSelectedItem();

您肯定应该阅读,并阅读您正在使用的swing组件的javadoc

组合框接受任何类型的对象。为了显示它们的值,它使用对象的tht toString方法。因此,您可能有以下代码:

@Entity
public class Genre {
    // fields and methods

    @Override 
    public String toString() {
        return this.name;
    }
}

// in your GUI
List<Genre> genres = findAllGenresSortedByName();
this.cbGenre = new JComboBox(genres.toArray());
// ...
Genre selectedGenre = (Genre) this.cbGenre.getSelectedItem();

您肯定应该阅读,并阅读您正在使用的swing组件的javadoc

你似乎没有理解关于挥杆的一件非常重要的事情。据我所知,它是真正的MVC的最佳实现之一,而不是web MVC2对我的折磨

因此,可以使用经典的MVC习惯用法定义每个Swing组件

例如,对于JComboBox,您有

一种观点是:政府本身 一个模型:在大多数情况下,它是从您提供给它的字符串数组实例化的 一组控制器:您创建的用于处理视图中各种事件的各种事件处理程序。 然而,在另一个层次上,组件扮演着其他角色。如果检查项目渲染,则可以说

一种模式:ComboBoxModel 一个控制器:JComboBox 一个视图:用于显示这些元素的 回到您的问题,假设您将游戏组合框模型更改为不包含字符串,而是包含游戏对象。然后,您的组合框将显示如下字符串Game@1548ea8,然后可以使用正确的ListCellRenderer对其进行更改

在这种情况下,调用将返回给您一个直接可用的游戏


如果你对你的类型组合框做同样的事情,我想关联代码的编写会简单得多。

你似乎没有理解Swing的一个非常重要的方面。据我所知,它是真正的MVC的最佳实现之一,而不是web MVC2对我的折磨

因此,可以使用经典的MVC习惯用法定义每个Swing组件

例如,对于JComboBox,您有

一种观点是:政府本身 一个模型:在大多数情况下,它是从您提供给它的字符串数组实例化的 一组控制器:您创建的用于处理视图中各种事件的各种事件处理程序。 然而,在另一个层次上,组件扮演着其他角色。如果检查项目渲染,则可以说

一种模式:ComboBoxModel 一个控制器:JComboBox 一个视图:用于显示这些元素的 回到您的问题,假设您将游戏组合框模型更改为不包含字符串,而是包含游戏对象。然后,您的组合框将显示如下字符串Game@1548ea8,然后可以使用正确的ListCellRenderer对其进行更改

在这种情况下,调用将返回给您一个直接可用的游戏


如果你对你的类型组合框做同样的事情,我想关联代码的编写会简单得多。

我想这个问题得到了最好的答案+1对于您提到的Swing教程,所有Swing开发人员都必须阅读。谢谢。答案很清楚。感谢您抽出时间阅读,并提供答案。它正好提供了我所需要的。从现在起,我将更好地阅读文档。我真的需要做得更好,而不仅仅是一般性的搜索。但是,我已经学到了很多关于java的知识^^^我在两周前从零开始:a+1真的!实际上,实现
ting toString只是为了显示在组合、表、树或任何想要呈现对象的视图中,对于原始对象和包装器来说都是一个坏主意。自定义视觉表示(包括字符串表示)的Swing方式是自定义渲染器+我想这个问题得到了最好的答案+1对于您提到的Swing教程,所有Swing开发人员都必须阅读。谢谢。答案很清楚。感谢您抽出时间阅读,并提供答案。它正好提供了我所需要的。从现在起,我将更好地阅读文档。我真的需要做得更好,而不仅仅是一般性的搜索。但是,我已经学到了很多关于java的知识^^^我在两周前从零开始:a+1真的!实际上,实现toString只是为了显示在组合、表、树或任何视图中,以呈现对象,这对于原始视图和包装器都是一个坏主意。自定义视觉表示(包括字符串表示)的Swing方式是自定义渲染器+1指向教程:-aah!这与前面的答案相结合,我无法要求更多。也非常感谢你+1.给它游戏对象正是我想要的。@Riduidel:我在回答中没有提到ListCellRenderer,因为它们在用于更改显示的字符串时会导致问题:显示的字符串是在渲染器中设置的字符串,但组合框中的键盘导航仍然使用模型元素的toString方法。这就是为什么我更喜欢使用包装器对象。我保留渲染器的颜色,图标等。。我已经使用了包装器方法。事实上,我将存储库模式与MVC结合使用,或者至少尝试使用MVC,这似乎对我来说最有效。存储库模式,我从我有限的ASP.NET MVC 2知识中窃取了。但是他,我还小,所以所有这些流行音乐的新东西都非常有趣^^^不管是否使用它,我还是会看看列表单元格渲染器,只是为了将来熟悉它。你确定键盘导航吗?我对这些ListCellRenderer/ComboBoxModel组合有很好的经验:使用的ComboxModel确保项目按照ListCellRenderer使用的顺序,这反过来又保证了所有导航方法的正确性。@Riduidel:是的,我确定。查看JComboBox.DefaultKeySelectionManager.aah的源代码!这与前面的答案相结合,我无法要求更多。也非常感谢+1.给它游戏对象正是我想要的。@Riduidel:我在回答中没有提到ListCellRenderer,因为它们在用于更改显示的字符串时会导致问题:显示的字符串是在渲染器中设置的字符串,但组合框中的键盘导航仍然使用模型元素的toString方法。这就是为什么我更喜欢使用包装器对象。我保留颜色、图标等的渲染器。。我已经使用了包装器方法。事实上,我将存储库模式与MVC结合使用,或者至少尝试使用MVC,这似乎对我来说最有效。存储库模式,我从我有限的ASP.NET MVC 2知识中窃取了。但是他,我还小,所以所有这些流行音乐的新东西都非常有趣^^^不管是否使用它,我还是会看看列表单元格渲染器,只是为了将来熟悉它。你确定键盘导航吗?我对这些ListCellRenders/ComboxModel组合有非常好的体验:使用的ComboBox模型确保项目按照ListCellRenderer使用的顺序,这反过来保证了所有导航方法的正确性。@Riduidel:yes,我确信。查看JComboBox.DefaultKeySelectionManager的源代码。