这是关于同一问题的两个问题。我正在做一个完成后看起来像这样的数字时钟项目:
一帧中有9个面板。一个班的小组,TitlePanel
班的6个,DigitPanel
班的2个ColonPanel
。我遇到的问题出在DigitPanel
课堂上。我现在编写的代码只显示一个面板,但是当我运行程序时,数字面板想要占据整个 JFrame。有人可以告诉我问题是什么吗?
主类:
public class DigitalTimeUI extends JFrame {
public DigitalTimeUI() {
JFrame clock = new JFrame("Clock");
clock.setSize(605, 250);
clock.setDefaultCloseOperation(EXIT_ON_CLOSE);
clock.setLocationRelativeTo(null);
clock.setResizable(false);
clock.add(new TitlePanel(), BorderLayout.NORTH);
clock.add(new DigitPane(), BorderLayout.SOUTH);
clock.pack();
clock.setVisible(true);
}
public class DigitPane extends JPanel {
DigitPanel[] hourDigit = new DigitPanel[]{new DigitPanel(), new DigitPanel()};
DigitPanel[] minDigit = new DigitPanel[]{new DigitPanel(), new DigitPanel()};
DigitPanel[] secDigit = new DigitPanel[]{new DigitPanel(), new DigitPanel()};
private String hour = pad(Calendar.getInstance().get(Calendar.HOUR));
private String min = pad(Calendar.getInstance().get(Calendar.MINUTE));
private String sec = pad(Calendar.getInstance().get(Calendar.SECOND));
private char[] hours = hour.toCharArray();
private char[] minutes = min.toCharArray();
private char[] seconds = sec.toCharArray();
public DigitPane() {
JLabel label = new JLabel();
label.setFont(new Font("Tahoma", Font.BOLD, 72));
label.setForeground(Color.WHITE);
JPanel digitsPanel = new JPanel(new GridBagLayout());
digitsPanel.setSize(new Dimension(605, 100));
digitsPanel.add(new panelPadding());
label.setText(String.valueOf(hours[0]));
hourDigit[0].add(label);
digitsPanel.add(hourDigit[0]);
digitsPanel.add(new panelPadding());
label.setText(String.valueOf(hours[1]));
hourDigit[1].add(label);
digitsPanel.add(hourDigit[1]);
digitsPanel.add(new panelPadding());
digitsPanel.add(new ColonPanel());
digitsPanel.add(new panelPadding());
label.setText(String.valueOf(minutes[0]));
minDigit[0].add(label);
digitsPanel.add(minDigit[0]);
digitsPanel.add(new panelPadding());
label.setText(String.valueOf(minutes[1]));
minDigit[1].add(label);
digitsPanel.add(minDigit[1]);
digitsPanel.add(new panelPadding());
digitsPanel.add(new ColonPanel());
digitsPanel.add(new panelPadding());
label.setText(String.valueOf(seconds[0]));
secDigit[0].add(label);
digitsPanel.add(secDigit[0]);
digitsPanel.add(new panelPadding());
label.setText(String.valueOf(seconds[1]));
secDigit[0].add(label);
digitsPanel.add(secDigit[1]);
digitsPanel.add(new panelPadding());
this.add(digitsPanel);
}
}
protected String pad(int value) {
StringBuilder sb = new StringBuilder(String.valueOf(value));
while (sb.length() < 2) {
sb.insert(0, "0");
}
return sb.toString();
}
public static void main(String[] args) {
new DigitalTimeUI();
}
public class panelPadding extends JPanel {
public panelPadding() {
this.setPreferredSize(new Dimension(5, 80));
}
}
}
标题面板:
public class TitlePanel extends JPanel {
JLabel title;
public TitlePanel() {
this.setBackground(Color.WHITE);
this.setPreferredSize(new Dimension(605, 100));
this.setLayout(new GridBagLayout());
title = new JLabel("DIGITAL CLOCK");
title.setFont(new Font("Tahoma", Font.BOLD, 72));
title.setForeground(Color.BLACK);
this.add(title);
}
}
数字面板:
public class DigitPanel extends JPanel {
public DigitPanel() {
this.setLayout(new GridBagLayout());
this.setPreferredSize(new Dimension(80, 80));
this.setBackground(Color.BLACK);
}
}
当我调整它的大小时,标题面板(无论出于何种原因)不会占据整个框架,但数字面板会,我不知道为什么。我尝试了.setLocation()
, .setLayout()
,.setSize()
和其他一些东西,但似乎没有任何效果。
或许可以在这里回答的第二个问题是,创建每个数字面板的最佳方式是什么?我之前正在玩一个while循环和一个switch语句,但没有得到任何结果,因为我一直遇到我解决的第一个问题。谢谢。