JLabel方向导致错误

时间:2015-03-26 15:55:17

标签: java swing jframe jlabel

我是Java Swing的新手。我创建了一个简单的JFrame,如下面的代码中所示,但当行statusLabel = new JLabel("statusLabel", JLabel.WEST);出现时,我在运行时收到以下发布的错误,当我对该行进行注释时,会出现JFrame。

请让我知道为什么这一行statusLabel = new JLabel("statusLabel", JLabel.WEST);会导致错误。

public GUI() {
    // TODO Auto-generated constructor stub
    prepareGUI();
}
private void prepareGUI() {
    // TODO Auto-generated method stub
    mainFrame = new JFrame("Swing Example");
    mainFrame.setSize(400, 400);

    headerLabel = new JLabel("headerLabel", JLabel.CENTER);
    statusLabel = new JLabel("statusLabel", JLabel.WEST);//this line when it is exist, causes errors

    mainFrame.add(headerLabel);
    mainFrame.add(statusLabel);
    mainFrame.setVisible(true);
}

public static void main(String[] args) {
    GUI gui = new GUI();
}

错误

Exception in thread "main" java.lang.IllegalArgumentException: horizontalAlignment
at javax.swing.JLabel.checkHorizontalKey(Unknown Source)
at javax.swing.JLabel.setHorizontalAlignment(Unknown Source)
at javax.swing.JLabel.<init>(Unknown Source)
at javax.swing.JLabel.<init>(Unknown Source)
at test.GUI.prepareGUI(GUI.java:23)
at test.GUI.<init>(GUI.java:15)
at test.GUI.main(GUI.java:31)

更新

现在使用.LEFT之后,假设放置在.CENTER的文本消失了。为什么会这样?

4 个答案:

答案 0 :(得分:2)

这不是对齐的有效参数。

来自API

  

horizo​​ntalAlignment - 定义的以下常量之一   SwingConstants:LEFT,CENTER,RIGHT,LEADING或TRAILING。

编辑 - 您还将两个JLabel添加到JFrame的默认位置,在您的情况下,它将是BorderLayout.CENTER。这就是你的JLabel不可见的原因。修改JFrame的布局,或将JLabel放在默认BorderLayout中的不同位置。更多信息:http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html

答案 1 :(得分:1)

根据Documentation

,您无法使用JLabel.WEST
  

public JLabel(String text,         int horizo​​ntalAlignment)

     

使用指定的文本和水平创建JLabel实例   对准。标签在其显示区域垂直居中。

     

参数:       text - 标签显示的文本       horizo​​ntalAlignment - SwingConstants中定义的以下常量之一:LEFT,CENTER,RIGHT,LEADING或TRAILING。

horizo​​ntalAlignment的唯一选项是LEFT, CENTER, RIGHT, LEADING or TRAILING

所以在你的情况下使用JLabel.LEFT

答案 2 :(得分:0)

您应该在JLabel

中添加BorderLayout

See here

答案 3 :(得分:0)

您可以更改此声明

statusLabel = new JLabel("statusLabel", JLabel.WEST);

statusLabel = new JLabel("statusLabel", SwingConstants.WEST);

通知

import javax.swing.SwingConstants;