Gå til innhold

[Løst] Beste måten å tegne en linje på?


Anbefalte innlegg

Videoannonse
Annonse

Du kan teste med Klassen java.awt.Graphics som har følgende metoder.

 

public void drawLine(in x1, int y1, int x2, int y2);

 

Denne metoden tegner en rett linje fra punktet (x1, y1) til punktet (x2, y2).

 

Om du søker på denne klassen finner du også sikkert noen eksempler.

Endret av cronbach alpha
Lenke til kommentar

Ah, skjønte ikke helt hvordan jeg skulle bruke denne men dette gikk jo greit :)

 

Men jeg støter på et problem; når applikasjonen min kjøres tegner ikke linjen. Hvis jeg derimot har en timer som tegner linjen etter at applikasjonen er startet tegnes linjen som den skal. Må applikasjonen min ha "litt tid på seg" før den kan tegne en linje? ... Høres litt rart ut

 

Min kode:

 

Hoved-klasse:

 

package line;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
public class Application implements ActionListener {
private Window window;
private Timer timer;
public Application() {
 window = new Window("Line");
 window.drawLine(0, 0, 300, 300);
 timer = new Timer(1000,this);
 timer.start();
}
public static void main(String[] args) {
 new Application();
}
@Override
public void actionPerformed(ActionEvent arg0) {
 timer.stop();
 System.out.println("tick");
}
}

 

Window:

 

package line;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
public class Window extends JFrame {
private static final long serialVersionUID = 1L;
private int width = 400, height = 400;
public Window(String name) {
 super();
 setTitle(name);
 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 setDefaultLookAndFeelDecorated(true);
 setSize(width, height);
 setLayout(null);
 setResizable(false);
 setVisible(true);
}
public void drawLine(int x1, int x2, int y1, int y2) {
 Graphics graphics = this.getGraphics();
 graphics.setColor(Color.black);
	graphics.drawLine(x1, x2, y1, y2);
}
}

 

Koden ovenfor tegner ikke en linje, men hvis jeg flytter "window.drawLine"-metodekallet ned til hvor timeren kaller ActionEvent, virker det som det skal...

Endret av fuglecassa
Lenke til kommentar

Har har laget en liten kodesnutt som gjør det samme som din, men satt opp litt annerledes.

 

 

import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
class Vindu extends JFrame {
public Vindu(String tittel) {
	setTitle(tittel);
	setSize(400, 400); // bredde, høyde
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	Tegning strek = new Tegning();
	add(strek);
}
}
class Tegning extends JPanel {
public void paintComponent(Graphics strek) {
	super.paintComponent(strek);  // Denne må du huske
	setBackground(Color.GREEN);
	strek.drawLine(0, 0, 300, 300);
}
}
class GrafikkEksempel {
public static void main(String[] args) {
	long startTime, endTime;
	startTime = System.currentTimeMillis();
	Vindu etVindu = new Vindu("Enkel strek!");
	etVindu.setVisible(true);
	endTime = System.currentTimeMillis();
	System.out.println("Tiden: " + (endTime - startTime) + " ms");
}
}

 

Timerfunksjoner burde settes under public static void main(String[] args){

 

Så det no, skulle du ha timer for hvor lenge vinduet skal vises?

Endret av cronbach alpha
Lenke til kommentar

Har har laget en liten kodesnutt som gjør det samme som din, men satt opp litt annerledes.

 

 

import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
class Vindu extends JFrame {
public Vindu(String tittel) {
	setTitle(tittel);
	setSize(400, 400); // bredde, høyde
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	Tegning strek = new Tegning();
	add(strek);
}
}
class Tegning extends JPanel {
public void paintComponent(Graphics strek) {
	super.paintComponent(strek);  // Denne må du huske
	setBackground(Color.GREEN);
	strek.drawLine(0, 0, 300, 300);
}
}
class GrafikkEksempel {
public static void main(String[] args) {
	long startTime, endTime;
	startTime = System.currentTimeMillis();
	Vindu etVindu = new Vindu("Enkel strek!");
	etVindu.setVisible(true);
	endTime = System.currentTimeMillis();
	System.out.println("Tiden: " + (endTime - startTime) + " ms");
}
}

 

Timerfunksjoner burde settes under public static void main(String[] args){

 

Så det no, skulle du ha timer for hvor lenge vinduet skal vises?

 

Har lagd en kode basert på din, som fungerer som den skal.

Men jeg skjønte fremdeles ikke hvorfor den første koden min ikke tegnet en linje. Det virker nesten som om vinduet "trenger litt tid på seg" før det kan tegne en linje.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...