0

例如,我有一个日历。是否可以将包含日期编号“1”的 JLabel 重用于我日历中的所有月份?还是我必须在其中制作另一个 JLabel?我做了一整年的日历,但我的代码有 7k 行代码......

4

2 回答 2

1

答案是:是的,您可以重用一个 GUI 组件,但是之前的组件将无法使用,因为 JLabel 一次只能显示在一个容器上,即最近添加到的容器上。

但你为什么想要?如果您的 JLabel 正在显示 ImageIcon,请重新使用它。否则,您只是用它显示文本。您的问题表明您的程序设计可能已经关闭,您可能需要重新考虑程序的结构。最重要的是,不要将程序的模型与其视图混淆。


您最近的评论:'

如果我不使用 ImageIcon 有可能吗?并且只使用纯 JLabel 文本?我正在使用 Netbeans GUI 创建者顺便说一句。

你又为什么要这样做?它只包含文本。我建议你不要这样做,我再次担心你的程序设计不好。也许您真正想要使用的是 JTable。

你好!感谢您的快速回复!我的 JLabel 日期在 JPanel(月份面板)内,所有面板都在 JFrame 内。当我单击一个 JButton 时,它会隐藏当前面板并显示下一个面板。每个面板(12 个月的面板)都有许多 JLabel。我应该每年制作另一个 JFrame 以避免滞后吗?

应该没有滞后。您将希望使用 CardLayout 交换 JPanel。

您可能想要做的是为一般 Month 对象创建一个类,然后为每个特定月份创建此对象的实例。再次,考虑重新设计。此外,学习在没有生成代码的情况下编写代码,因为这将增强您对正在使用的库的理解。


编辑 更多建议:

首先创建一个非 GUI 模型类,Month:

  • 给它一个字符串字段作为月份名称
  • 给它本月 1 日的一周中的一天(可能是一个枚举)
  • 给它一个 int 字段来表示一周中的天数。
  • 你可能想给它一个 DayEvent 对象的 ArrayList 来保存可能的事件,例如生日、假期等,以及用于此的 setter 和 getter 方法。

然后对于您的 GUI 部分,创建一个 GUI 类来表示月份,比如称为 MonthView

  • 手动创建,而不是 NetBeans 生成的代码
  • 给它一个 Month 字段,这样它就可以保存和使用它的模型,上面的 Month 类的一个实例。
  • 给它一个边框布局
  • 给它一个标题 JLabel 来显示月份名称,然后添加这个 BorderLayout.NORTH。
  • 给它一个使用 GridLayout(0, 7) 的 JPanel - 用于七列和可变数量的行。添加此 BorderLayout.CENTER
  • 使用 JLabels 填充此 GridLayout。
  • 有可用的逻辑将您的日期字符串放置在正确的 JLabel 网格单元格中。

现在您的日期将由最多包含 35 个 JLabel 的代码表示。当然,您的日期将有 365 个 JLabel,但只需要35 (7 * 5) 个 JLabel 的代码即可创建所有 JLabel。

于 2013-09-30T15:00:01.357 回答
0

如果您要与早期的 JLabel 同时绘制它,您应该创建一个新的 JLabel。

要获得高质量的答案,您应该提供一个清晰、简单、自包含的代码示例来演示您的问题。

于 2013-09-30T14:58:05.867 回答