Horizontale lijnen tekenen

Status
Niet open voor verdere reacties.

Pearson

Nieuwe gebruiker
Lid geworden
12 okt 2009
Berichten
4
Hallo mensen,

ik moet voor school een java opdracht maken, deze luid als volgt:

Maak een programma dat horizontale lijnen op de onderste helft van het venster plaatst.
De afstand tussen de lijnen is variabel en door de gebruiker in te stellen via een tekstvak aan de bovenkant van het venster. Gebruik daarbij de While-opdracht.

Nu had ik het volgende gemaakt met behulp van het boeken en voorbeelden van andere opgave.

Echter als ik dit run zie ik maar 1 horizontale lijn, wanneer ik een cijfer in het tekstfield type en op de actieknop druk gebeurt er niets? Ik zit zelf de hele tijd te knoeien met de while opdracht en Integer.parseInt maar kom er echt niet uit.

Iemand die mischien kan zien wat ik verkeert doe, voordat ik weer 3 uur voor niks bezig ben:shocked:.

package lijn;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class LijnenPaneel extends JPanel implements ActionListener{

private JTextField veld1;
private JButton actieknop;
private int teken = 0;
int onder ;


public LijnenPaneel()
{

actieknop = new JButton(">Teken de lijnen>");
actieknop.addActionListener(this);
veld1 = new JTextField(3);
add(veld1);
add(actieknop);
veld1.setText("5");
this.setToolTipText("Lijnen");

}

public void actionPerformed(ActionEvent e)
{
int teken = Integer.parseInt(veld1.getText());
//String invoer = veld1.getText();
//getal += Integer.parseInt(invoer);
}

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

g.setColor(Color.RED);
int onder = getWidth();

int xPos = 200;
while (xPos <= onder)
{
g.drawLine( 0, 200, 600, 200 );
xPos = xPos + 2;

int teken = Integer.parseInt(veld1.getText());
//teken = g.drawLine( 0, 200, 600, 200 );
//xPos = xPos + 2;

}

}
}
 
Laatst bewerkt:
Code:
package lijn;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class LijnenPaneel extends JPanel implements ActionListener{

private JTextField veld1;
private JButton actieknop;
private int teken = 0;
int onder ;


public LijnenPaneel()
{

actieknop = new JButton(">Teken de lijnen>");
actieknop.addActionListener(this);
veld1 = new JTextField(3);
add(veld1);
add(actieknop);
veld1.setText("5");
this.setToolTipText("Lijnen");

}

public void actionPerformed(ActionEvent e)
{
int teken = Integer.parseInt(veld1.getText());
//String invoer = veld1.getText();
//getal += Integer.parseInt(invoer);
}

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

g.setColor(Color.RED);
int onder = getWidth();

int xPos = 200;
while (xPos <= onder)
{
g.drawLine( 0, 200, 600, 200 );  [COLOR="Red"]// Je tekent hier telkens op dezelfde plek. Je zul je xPos in deze regel moeten verwerken ;)[/COLOR]
xPos = xPos + 2;

int teken = Integer.parseInt(veld1.getText());
//teken = g.drawLine( 0, 200, 600, 200 ); 
//xPos = xPos + 2;

}

}
}

Zie rode commentaarregel ;) Succes!
 
Code:
package lijn;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class LijnenPaneel extends JPanel implements ActionListener{

private JTextField veld1;
private JButton actieknop;
private int teken = 0;
int onder ;


public LijnenPaneel()
{

actieknop = new JButton(">Teken de lijnen>");
actieknop.addActionListener(this);
veld1 = new JTextField(3);
add(veld1);
add(actieknop);
veld1.setText("5");
this.setToolTipText("Lijnen");

}

public void actionPerformed(ActionEvent e)
{
int teken = Integer.parseInt(veld1.getText());
//String invoer = veld1.getText();
//getal += Integer.parseInt(invoer);
}

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

g.setColor(Color.RED);
int onder = getWidth();

int xPos = 200;
while (xPos <= onder)
{
g.drawLine( 0, 200, 600, 200 );  [COLOR="Red"]// Je tekent hier telkens op dezelfde plek. Je zul je xPos in deze regel moeten verwerken ;)[/COLOR]
xPos = xPos + 2;

int teken = Integer.parseInt(veld1.getText());
//teken = g.drawLine( 0, 200, 600, 200 ); 
//xPos = xPos + 2;

}

}
}

Zie rode commentaarregel ;) Succes!


Hartelijk dank voor de snelle reactie!

ik heb het als volgt aangepast

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

g.setColor(Color.RED);
int onder = getWidth();

int xPos = 200;
while (xPos <= onder)
{
g.drawLine( 0, xPos, 600, xPos );
xPos = xPos + 2;

int teken = Integer.parseInt(veld1.getText());
//teken = g.drawLine( 0, 200, 600, 200 );
//xPos = xPos + 2;

Nu zie ik inderdaad keurig horizontale lijnen XD

Alleen als ik een getal in het textfield invul, tekend het programma er geen variabele lijnen bij :(

Ik probeerde dat zelf te activeren met de onderstaande zin.

int teken = Integer.parseInt(veld1.getText());

helaas is teken oranje onderstreept en word er niks getekend...
 
Dus als teken == 5, moeten er 5 lijnen komen te staan? Dan zou je je while loop moeten veranderen:

Code:
while(xPos <= 200 + teken*2) //aangezien je xPos telkens met 2 verhoogt
{

//blabla
}
 
Dus als teken == 5, moeten er 5 lijnen komen te staan? Dan zou je je while loop moeten veranderen:

Code:
while(xPos <= 200 + teken*2) //aangezien je xPos telkens met 2 verhoogt
{

//blabla
}

Sorry ik begrijp niet wat je bedoelt en waar ik dat zou moeten aanpassen.

De opdracht luid:

Maak een programma dat horizontale lijnen op de onderste helft van het venster plaatst.

De afstand tussen de lijnen is variabel en door de gebruiker in te stellen via een tekstvak aan de bovenkant van het venster. Gebruik daarbij de
While-opdracht.

Nu had ik het volgende gemaakt met behulp van het boeken en voorbeelden van andere opgave.

Echter als ik dit run zie ik maar 1 horizontale lijn, wanneer ik een cijfer in het tekstfield type en op de actieknop druk gebeurt er niets? Ik zit zelf de hele tijd te knoeien met de while opdracht en Integer.parseInt maar kom er echt niet uit.

Iemand die mischien kan zien wat ik verkeert doe, voordat ik weer 3 uur voor niks bezig ben.:shocked:
 
lol, deze opdracht heb ik ook.
Gebruik jij toevallig ook het boek "Java de basis" van Andre Hollander ?
Ik zal het eerst even in het nederlands uitleggen en daarna in Java.

Nederlands: Je wilt dus 3 lijnen tekenen op de onderste helft van het veld.
de feiten op een rij:
-Je wilt de totale Breedte van je scherm hebben zodat de horizontale lijn compleet over je scherm gaat.
-Je wilt de Ypositie per lijn veranderen om zo netjes lijntjes onder elkaar te krijgen.

Doe dit stuk code compleet overnieuw.
en houdt rekening met de coordinaten: (x,y,x,y) zie de comment die ik heb geplaatst
Jouw Code
int onder = getWidth();

int xPos = 200;
while (xPos <= onder)
{
g.drawLine( 0, xPos, 600, xPos ); // g.darwline(beginXpos,beginYpos,eindXpos,eindYpos);
xPos = xPos + 2;
 
Als ik het goed begrijp wil je door middel van het tekst veld de afstand tussen de lijnen veranderen? Dan moet je het volgende doen:

Code:
package lijn;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class LijnenPaneel extends JPanel implements ActionListener {


    private JTextField veld1;
    private JButton actieknop;
    private int teken, breedte, hoogte; // standaard waarde van een int = 0


    public LijnenPaneel()
    {

        actieknop = new JButton(">Teken de lijnen>");
        actieknop.addActionListener(this);
        veld1 = new JTextField(3);
        add(veld1);
        add(actieknop);
        veld1.setText("5");
        this.setToolTipText("Lijnen");

    }

    public void actionPerformed(ActionEvent e)
    {
        teken = Integer.parseInt(veld1.getText()); // int niet nogmaals aanroepen ivm het al gedefineerd hebben van teken boven in!
        hoogte = getHeight(); // wordt gebruikt om het onderste punt te bepalen vanaf daar wordt er naar boven getekend
        breedte = getWidth(); // wordt gebruikt zodat de lijn altijd over de hele breedte van de JPanel loopt
        repaint(); // zorgt ervoor dat alles getekend wordt.
    }

    public void paintComponent( Graphics g )
    {
        g.setColor(Color.RED);
        
        while (hoogte >= 50) // hij stopt als hij hoger komt dan 50 pixels vanaf de bovenkant.
        {
            g.drawLine( 0, hoogte, breedte, hoogte );
            hoogte -= teken; // dit zorgt ervoor dat er per getekende lijn het aantal pixels af gaat voor de volgende

        }
    }
}

Zo, ik heb me even uit geleefd! Hopelijk is dit wat je zoekt!
Het enige wat ik zo snel even niet voor elkaar krijg is dat hij de lijnen weghaalt als je opnieuw op de knop drukt, maar als je het venster iets groter of kleiner maakt, dan verdwijnen de lijnen.
Als ik hierop de oplossing nog weet laat ik het wel weten!
 
Laatst bewerkt:
Kan iemand mij vertellen hoe de klasse "MAIN" eruit ziet bij deze klasse?

Ik kom er maar niet uit:

Ik heb een klasse main aangemaakt met daarin!

public static void main( String [] args)
{
new lijnenpaneel();
}
Maar dan werkt het niet...

kan iemand mij alsjeblieft helpen???
 
Wow, dat is een oud topic! :O haha. Kan me ook niks meer van de code herinneren! :p haha

On-Topic:
Je moet LijnenPaneel() toevoegen aan een (bijvoorbeeld) JFrame.
Vergeet ook niet op de hoofdletters te letten bij het aanroepen van new LijnenPaneel()
 
ok beetje laat maar heb de oplossing succes

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/*
 * Deze klasse maakt een paneel met een  tekstvak en een 
 * knop en reageert op de knop door de afstand tussen de lijnen te veranderen
 */

public class Horizontalepaneel extends JPanel implements ActionListener
{
	private JTextField veld1;
	private JButton actieknop;
	private int xPos;

	
	/*
	 * maak een paneel met een tekstvak en een knop ernaast
	 */
	public Horizontalepaneel()
	{
		actieknop = new JButton("Teken lijnen");
		actieknop.addActionListener(this);
		veld1 = new JTextField("3",3);//ruimte een getal met twee nullen
		add(veld1);
		veld1.addActionListener(this);
		add(actieknop);
		bepaalIngesteldeAfstand(); //de afstand tussen de lijnen
		veld1.setToolTipText("vul een getal in");
		actieknop.setToolTipText("verandert afstand tussen de lijnen");
	}
    /*
     * De lijnen worden getekend en de kleur bepaalt
     * dmv een while opdracht
     */
	public void bepaalIngesteldeAfstand()
	{
	     xPos = Integer.parseInt(veld1.getText());
	}
	public void  paintComponent(Graphics g)
	{
		super.paintComponent( g );
		g.setColor(Color.RED);
		int onder = (getHeight()); // hoogte van het scherm
		int yPos =  100;
		while (yPos <= onder)
		{
			g.drawLine(0, yPos,499 ,yPos);
			yPos = yPos +xPos;
		}
		}
		@Override
		public void actionPerformed(ActionEvent e) {
			bepaalIngesteldeAfstand(); // ruimte tussen de lijnen
			repaint ();
		
			
		}
	}
 
Laatst bewerkt door een moderator:
Inderdaad "een beetje" laat; bij deze het verzoek om oude topics met rust te laten, en je programmeerkunsten in actuelere topics te laten zien :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan