【发布时间】:2014-05-09 18:01:13
【问题描述】:
所以我在编程课上为我的最终项目制作了一个日历程序,并添加了一个月中列出的日期,我有一大堆 JLabels 作为实例变量(42 个用于 6 x 7 网格)
JLabel day1;
JLabel day2;
JLabel day3;
JLabel day4;
JLabel day5;
JLabel day6;
JLabel day7;
JLabel day8;
JLabel day9;
JLabel day10;
etc.
然后我有一个方法可以获取我设置的当前月份,并根据返回的内容我有一大堆 if 语句来设置哪些数字去哪个(我计划将 42 放在设置的位置只需根据月份更改其内容,而不是移动 31) 的位置
if (Threads.getMonth() == 0)
{
day1 = new JLabel("");
day2 = new JLabel("");
day3 = new JLabel("");
day4 = new JLabel("1");
day5 = new JLabel("2");
day6 = new JLabel("3");
day7 = new JLabel("4");
day8 = new JLabel("5");
day9 = new JLabel("6");
day10 = new JLabel("7");
etc.
我更有经验的朋友建议在 if 语句中创建对象,这就是它的样子。然后在这十二个 if 语句之后,我设置了边界并将其添加到框架中。
day10.setBounds(100, 100, 500,500);
add(day10);
我把它放在那个位置只是为了测试它是否出现并使用了第 10 天,因为无论哪个月第 10 天总是有一个实际值。
尽管每当我运行此程序时,JLabel 都无法显示,并且如果无法执行此操作,我将无法让我的程序运行。如果有帮助的话,我有大约 20 个类(每个月一个,一个主类,一个线程类,一个 gui,还有一些其他的用于我仍在研究的其他功能。)
这段代码来自 gui 类。如果它可能对我的类交互方式有影响,那就是主类调用线程类,线程获取日期并打开该月的类,该类打开 gui,然后所有按钮按下都通过一个处理程序类将数据发送到线程类以完成更多工作,然后您只需按 x 按钮即可退出。
我的 gui 类名是:
public class Gui extends JFrame
当我调用该类时,我将流布局设置为 null,并且它适用于其他所有内容(jcomboboxes、jbuttons)。
当我使用 add(day#) 语句时,因为它正在扩展 jframe,所以它应该将它添加到框架中,并且适用于除这些之外的所有其他东西,包括 jlabels。
【问题讨论】:
-
你能提供更多的代码吗?特别是您的“类名”maube,您不是从 JFrame 扩展的,或者您正在类中创建一个新的 JFrame。我只能帮到你了。
-
你在哪里
.add()-ing 你的标签?创建一个新标签并不会固有地将其放在屏幕上。你必须告诉它你想让它去哪里。 -
尝试使用父面板上的 FlowLayout。
-
如果你每个月都有一堂课,那么你的设计就有缺陷。还要创建一个标签数组并在循环中初始化它们,不要创建 42 个声明的实例。如果你确实想创建许多相同类型的实例而不初始化它们,你可以写
JLabel label1, label2 label3;来节省很多代码行。 -
为您的日历表示,创建一个 6 x 7 的
GridLayout,每个月只需要指定 first 插槽即可开始放置标签。您应该使用枚举来表示月份及其第一个值,或者类似的东西。