如何只将textfield的值转换为变量

时间:2012-09-28 17:03:51

标签: java swing awt paintcomponent graphic

您好我正在尝试在Java中绘制对角线,这不会像它应该的那样工作..

“value”变量每次都在for循环中更新,但它获得下一个值

例如,如果我插入1我在我的控制台中使用system.out.println(value)得到它:

  

2   4   8   16   32   64   128   256   512   1024   2048   4096   8192   16384   32768   65536   131072   262144   524288   1048576   2097152   4194304

但是变量“value”必须包含我插入的值..我使用的代码你可以在下面找到

DrawLines line = new DrawLines();
int value = 0;
public void paintComponent(Graphics g) {

    super.paintComponent(g);

    int xPos = 0;
    int yPos = getHeight() - (getHeight() / 2);

    for(int aantalLines = 0; aantalLines < 10; aantalLines++ ) {
        line.drawLines(g, xPos, yPos + value, getWidth(), getHeight() - value );
        value += value;
        System.out.println(value);
        System.out.println(aantalLines);
    }

}

public void actionPerformed(ActionEvent e) {

    try {
        value = Integer.parseInt(tussenRuimte.getText());
        repaint();
    }
    catch(NumberFormatException err) {
        JOptionPane.showMessageDialog(null, "Number Format Error: Vul alles goed in s.v.p");
    }

}

问题是它不能像这样工作..有人可以解释我做错了什么以及如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

不要在paintComponent方法中更改value的值。而是将其复制到paintComponent方法的另一个本地变量中,然后使用并更改那个变量。这样,每次调用paintComponent(...)时,它都不会重新设置由值保持的int。

例如,

public void paintComponent(Graphics g) {
    super.paintComponent(g);

    int xPos = 0;
    int yPos = getHeight() - (getHeight() / 2);
    int localValue = value;

    for(int aantalLines = 0; aantalLines < 10; aantalLines++ ) {
        line.drawLines(g, xPos, yPos + localValue, getWidth(), getHeight() - localValue );
        localValue += localValue;
        // System.out.println(value);
        // System.out.println(aantalLines);
    }
}

答案 1 :(得分:1)

为什么在已有循环变量的情况下修改value的值:

for(int aantalLines = 0; aantalLines < 10; aantalLines++ ) {
  line.drawLines(g, xPos,       yPos +        ((aantalLines + 1) * value), 
                    getWidth(), getHeight() - ((aantalLines + 1) * value) );
}

应该归结为@Hovercraft已经提出的建议。

如果这些解决方案都没有帮助,您可能在其他地方遇到问题。

注意:请勿改变paintpaintComponent,...方法中的状态。您无法控制调用次数和时间