如何在JFrame中居中和扩展我的JPanel?

时间:2014-10-04 07:27:22

标签: java user-interface jpanel grid-layout

我正在制作苹果日历应用程序的副本,我无法将月份名称和年份名称与屏幕中心对齐,同时将左右按钮与屏幕的左侧和右侧对齐。这是我的代码:

final JPanel months = new JPanel();
months.setLayout(new BoxLayout(months,BoxLayout.X_AXIS));
months.add(back, BorderLayout.WEST); //back is a JButton
JLabel monthName = new JLabel(this.monthNames[this.month]+" ", SwingConstants.CENTER); 
JLabel year = new JLabel("" + this.year, SwingConstants.CENTER);
monthName.setFont(new Font("Helvetica", 0, 24));
year.setFont(new Font("Helvetica", 0, 24));
monthName.setHorizontalAlignment(JLabel.CENTER);
months.add(monthName, BorderLayout.CENTER);
months.add(year, BorderLayout.CENTER);
months.add(front, BorderLayout.EAST);
add(months);

然而它出现了这样:

http://i.stack.imgur.com/RasfN.png

1 个答案:

答案 0 :(得分:0)

months.setLayout(new BoxLayout(months,BoxLayout.X_AXIS));

您正在使用BoxLayout。 BoxLayout只是将组件水平添加到面板。 WEST,CENTER,EAST约束仅由BorderLayout使用,因此BoxLayout会忽略它们。

months.add(monthName, BorderLayout.CENTER);
months.add(year, BorderLayout.CENTER);

使用BorderLayout时,您只能将单个组件添加到布局的某个区域。因此,如果要向CENTER添加两个组件,则需要先创建一个面板并将组件添加到面板中。

所以你的基本代码可能是这样的:

JPanel centerPanel = new JPanel();
centerPanel.add(month);
centerPanel.add(year);

JPanel mainPanel = new JPanel( new BorderLayout() );
mainPanel.add(westButton, BorderLayout.WEST);
mainPanel.add(centerPanel, BorderLayout.CENTER);
mainPanel.add(eastButton, BorderLayout.EAST);