Search code examples
javaswingawtpaintcomponentgraphic

how to get only the value of textfield into variable


Hello I am trying to draw diagonal lines in Java and this won't work like it should..

the "value" variable is beeing updated in a for loop each time but it gets the next value

for example if i insert a 1 i get this in my console with a 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

but the variable "value" has to contain the value i insert.. the code i use for this you can find below

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");
    }

}

the problem is that it doesn't work like this.. can someone explain what i do wrong and how to fix this?


Solution

  • Why modifying the value of value while you already have a loop variable:

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

    which should come down to what @Hovercraft already suggested.

    If none of those solutions help, you probably have a problem somewhere else.

    Note: do not alter state in the paint, paintComponent, ... methods. You have no control over how many times and when they are invoked