notsohard4get Skrevet 15. april 2013 Del Skrevet 15. april 2013 Hei Har lyst til å tegne en linje i en JFrame, har googlet litt rundt men ser ut som om det er mange måter å gjøre dette på. Har du/dere tips til hva som er den enkleste og beste måten å gjøre dette på? Mvh cassa Lenke til kommentar
cronbach alpha Skrevet 15. april 2013 Del Skrevet 15. april 2013 (endret) 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 15. april 2013 av cronbach alpha Lenke til kommentar
notsohard4get Skrevet 15. april 2013 Forfatter Del Skrevet 15. april 2013 (endret) 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 15. april 2013 av fuglecassa Lenke til kommentar
cronbach alpha Skrevet 15. april 2013 Del Skrevet 15. april 2013 (endret) 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 15. april 2013 av cronbach alpha Lenke til kommentar
notsohard4get Skrevet 15. april 2013 Forfatter Del Skrevet 15. april 2013 Takk for svar, skal se videre på saken imorgen Timeren var egentlig bare for å lage en ticker, men visste seg at jeg måtte bruke den for å tegne linjen Lenke til kommentar
notsohard4get Skrevet 16. april 2013 Forfatter Del Skrevet 16. april 2013 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå