【问题标题】:Improper Alignment Error with Java AWT. Cannot get my label to moveJava AWT 不正确的对齐错误。无法让我的标签移动
【发布时间】:2012-03-13 00:04:29
【问题描述】:

我在我的框架中放了一个标签,但它拒绝移动。 SetBounds() 不起作用,如果我将任何参数放在“结果”之后,而不是 0、1 或 2,我会得到一个不正确的对齐错误,这些参数都没有把它放在正确的位置。这是我声明标签的地方:

标签结果 = new Label("Result.", 3);

这是 SetBounds 语句:

result.setBounds(0, 1500, 100, 20);

我正在编写的这个程序,我只是想让用户输入 2 个数字,将它们相加,然后使用 GUI 组件打印结果。结果是拒绝改变的标签。整个程序的代码在下面,程序还没有完成,但是如果你编译它,结果总是卡在左边,我希望它和TextFields处于同一水平。这个问题实际上发生在其他标签、Help1 和 Help2 上。请不要告诉我我必须使用swing!我不喜欢摇摆。

我尚未将事件更改为添加用户输入的位置。我从以前的程序中复制了该事件。

代码:(抱歉没有 cmets,但它不是一个庞大的程序)

import java.awt.*;
import java.awt.event.*;

public class MouseClick {
    TextField number1;
    TextField number2;

    public static void main(String[] args) {
        MouseClick MC = new MouseClick();
    }

    public MouseClick() {
        Frame f = new Frame("Addition Time!");
        Button button = new Button("Click Here To Add The Two Numbers.");
        button.setBounds(175, 250, 230, 30);
        button.addMouseListener(new MyMouseListener());
        f.add(button);
        Label help1 = new Label("Enter the first number below.");
        Label help2 = new Label("Enter the second number below.");
        Label exprsn1 = new Label("+", 0);
        Label exprsn2 = new Label("=", 0);
        Label result = new Label("Result.", 3);
        number1 = new TextField("TextField1", 100);
        number2 = new TextField("TextField2", 100);
        help1.setBounds(50, 80, 150, 20);
        help2.setBounds(250, 80, 150, 20);
        exprsn1.setBounds(00, 80, 30, 30);
        exprsn2.setBounds(00, 80, 30, 30);
        number1.setBounds(50, 100, 100, 20);
        number2.setBounds(250, 100, 100, 20);
        result.setBounds(0, 1500, 100, 20);
        f.add(number1);
        f.add(number2);
        f.add(help1);
        f.add(help2);
        f.add(result);
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                System.exit(0);
            }
        });
        f.setSize(600, 300);
        f.setVisible(true);
    }

    public class MyMouseListener extends MouseAdapter {
        public void mouseClicked(MouseEvent me) {
            String S = number1.getText();
            number2.setText(S);
        }
    }
}

【问题讨论】:

  • 顺便问一下,你有使用绝对布局和纯 AWT 的具体理由吗?使用 Swing + 布局管理器,这个例子会简单得多。
  • “请不要告诉我我必须使用swing!我不喜欢swing。”你试过原生PLAF吗(如@987654321的最后3张截图所示@? 顺便说一句 - 没有人必须使用 Swing 或布局,但如果他们这样做,他们获得帮助的机会会更大。

标签: java user-interface label alignment awt


【解决方案1】:

错误是因为3不是构造函数中参数“alignment”的允许值

Label(String text, int alignment) 

您是否对具有类似构造函数的 TextField() 感到困惑?

TextField(String text, int columns)

标签没有出现在正确位置的原因是您没有明确指定使用空布局。你需要这一行:

public MouseClick() {
    Frame f = new Frame("Addition Time!");
    f.setLayout(null);  // add this line

【讨论】:

  • 我知道。我的问题是我找不到将标签设置到某个位置的任何方法。我想要介于 1 和 2 之间的东西,但这会导致类型不兼容的错误。
  • 您需要 setLayout(null),我已经尝试过了,您对 result.setBounds() 的调用现在可以正常工作。答案已更新。
  • @user1264450 不用担心。你能接受这个解决方案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多