Java Swing JPanel是否可以保存一个String值,而不是可以修改/访问的值,我可以保存一些信息吗?
我看不到其他选择,只是实现我自己的类,持有JPanel和String ...只是试图节省一些空间/编码..
我喜欢Component超类的setName / getName ...使用它有什么不便吗?
答案 0 :(得分:6)
是的,它可以。任何Swing组件都可以保留特定组件的client properties
。
请参阅JComponent的putClientProperty(...)
和getClientProperty(...)
方法。使用此方法,您可以定义任意数量的客户端属性:
panel.putClientProperty("Title", "Panel1");
panel.putClientProperty("Description", "some text for the description");
如果您只想使用字符串名称唯一标识面板,也可以使用setName(..)
和getName()
方法。许多IDE将使用此属性。
当然,如果您正在创建具有多个Swing组件和相关实例变量的面板,那么您可能会扩展JPanel并自定义其行为。
我喜欢Component超类的setName / getName ...使用它有什么不便吗?
如果您觉得"名称"属性充分描述了您要存储的数据,这是存储数据的最有效方式。但是,如果数据实际上不是组件的名称,那么就不要因为它易于使用而强制数据。此外,某些IDE可能会将此属性用于通用调试或消息传递。它可以检查在错误消息中显示此值以帮助识别特定组件。
答案 1 :(得分:2)
有几种解决方案,很难知道你在这里寻找什么。您可以创建一个扩展MyJPanel
的{{1}}类,除了包含带有getter / setter的String字段外,它是相同的。您还可以通过设置/获取JPanel的名称来以愚蠢的方式存储信息。 (这是使用JPanel
超类的setName
和getName
。)另一种解决方案是将一个JLabel或其他具有该信息的组件添加到JPanel中,如果需要,使其不可见或隐藏。
答案 2 :(得分:1)
不,我认为它不能保存字符串值。
你可以在这里看到所有的getter / setter:
http://docs.oracle.com/javase/7/docs/api/javax/swing/JPanel.html
此外,您可以查看源代码(如果您想要那么远)。
没有getter / setter用于保存String值 (我的意思是......例如没有setText或setTitle)。
当然,你可以添加例如一个看不见的JTextField到您的JPanel和
将String设置为JTextField。但这对我来说似乎并不是很好。
答案 3 :(得分:0)
您可以添加类似JLabel / JTextField的组件并使用setVisible(false)
。该对象可以包含字符串。
注意:仅适用于按钮
您可以使用setAtionCommand()
,但它会缩进非常具体的内容。其他任何东西都是可怕的做法。
答案 4 :(得分:0)
JPanels持有JComponents,即JButtons,JLabels等.String不是一个组件。如果您只是使用带有String作为参数的JLabel,然后将其添加到JPanel中,那将是最好的。