Java Swing JPanel能保持字符串值吗?

时间:2014-07-16 20:11:15

标签: java swing jpanel

Java Swing JPanel是否可以保存一个String值,而不是可以修改/访问的值,我可以保存一些信息吗?

我看不到其他选择,只是实现我自己的类,持有JPanel和String ...只是试图节省一些空间/编码..

我喜欢Component超类的setName / getName ...使用它有什么不便吗?

5 个答案:

答案 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超类的setNamegetName。)另一种解决方案是将一个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中,那将是最好的。