例如,我有一个日历。是否可以将包含日期编号“1”的 JLabel 重用于我日历中的所有月份?还是我必须在其中制作另一个 JLabel?我做了一整年的日历,但我的代码有 7k 行代码......
2 回答
答案是:是的,您可以重用一个 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。
如果您要与早期的 JLabel 同时绘制它,您应该创建一个新的 JLabel。
要获得高质量的答案,您应该提供一个清晰、简单、自包含的代码示例来演示您的问题。