我可以在程序的不同部分重用 JLabel 组件吗?



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

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

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


您最近的评论:'

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

再说一遍,你为什么要这样做?它只保存文本。我建议你不要这样做,我再次担心你的程序设计很糟糕。也许你真正想用的是JTable。

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

应该没有滞后。您将需要使用 CardLayout 交换 JPanels 。

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


编辑更多建议:

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

  • 为其指定月份名称的字符串字段
  • 给它一个星期几(可能是枚举(作为本月 1 号的星期几
  • 给它一个 int 字段,表示一周中的天数。
  • 您可能希望为其提供 DayEvent 对象的 ArrayList 来保存要放在日历上的可能事件,例如生日、假期等,以及为此设置和获取方法。

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

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

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

如果要与

早期的 JLabel 同时绘制它,则应创建一个新的 JLabel。

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

最新更新