2013-09-30 38 views
0

例如,我有一个日历。是否可以重复使用包含日期编号“1”的JLabel到我日历中的所有月份?还是必须另外制作另一个JLabel?我做了一整年的日历,但我的代码有7k行代码...我可以在我的程序的不同部分重用JLabel组件吗?

+1

7K行代码似乎有点过分。不要告诉我你是复制粘贴每天... –

+0

感谢您的回复家伙! JLabel使用文本。我还为每年的每个月使用JPanels。所以在我的面板中有一堆JLabel,使我滞后。 – Storio

回答

1

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

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


你最近的评论:”

想如果我不使用的ImageIcon这可能吗?并只使用纯JLabel文本?我正在使用Netbeans GUI创建器。

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

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

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

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


编辑更多推荐:

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

  • 给它一个字符串字段的月份名称
  • 给它一个天这个星期的一周中的某一天(可能是一个枚举)
  • 给它一个int字段的天数e周。
  • 您可能想给它DayEvent对象的ArrayList,以保存可能的事件放在日历上,如生日,节假日等,以及setter和getter方法。

那么对于你的GUI部分,创建一个GUI类来表示一个月,说叫MonthView

  • 通过没有的NetBeans生成的代码来创建它
  • 给它一个月因此它可以保存并使用它的模型,这是上述Month类的一个实例。
  • 给它一个BorderLayout
  • 给它一个标题JLabel显示月份名称,并添加此BorderLayout.NORTH。
  • 给它一个使用GridLayout(0,7)的JPanel - 用于7列和可变数量的行。添加此BorderLayout.CENTER
  • 用JLabels填充此GridLayout。
  • 有可用的逻辑将您的日期字符串放入正确的JLabel网格单元格中。

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

+0

如果我不使用ImageIcon,有可能吗?并只使用纯JLabel文本?我正在使用Netbeans GUI创建器。 – Storio

+0

@JamesTorio:看编辑来回答。 –

+0

嗨。我的程序gui如下所示: http://s16.postimg.org/w41b329ud/asdasdad.png 我可以使用JTable重新创建它吗?真的很感谢答案。 – Storio

0

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

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

+0

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

+0

您可能不应该创建新的JFrame,因为这是容纳组件的顶级容器。您可以为每个日历月份创建一个单独的JPanel,然后延迟加载它,以便仅初始化可见的JPanel。 – codethulhu

相关问题