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

时间:2013-09-30 14:56:59

标签: java swing calendar jlabel

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

2 个答案:

答案 0 :(得分:1)

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

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


您最近的评论:'

  

如果我不使用ImageIcon,是否可以?并只使用纯JLabel文本?我正在使用Netbeans GUI创建者btw。

再次你为什么要?它只是持有文字。我建议你不要这样做,我再次担心你的程序设计很糟糕。也许你真正想要使用的是JTable。

  

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

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

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


修改更多建议:

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

  • 为月份名称
  • 指定字符串字段
  • 在本月1日的一周中给它一周中的一天(可能是枚举)
  • 为一周中的天数提供一个int字段。
  • 您可能希望为其提供DayEvent对象的ArrayList,以保存可能放在日历上的事件,例如生日,假期等,以及用于此的setter和getter方法。

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

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

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

答案 1 :(得分:0)

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

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