Cemi Skrevet 8. april 2010 Del Skrevet 8. april 2010 (endret) Spørsmål løst ved å bruke e.getPointt(); istedefor event.getX og getY. Ikke vet jeg hvorfor, men nå fungerer det ihvertfall. Har løst det originale spørsmål, oppdaterer derfor denne tråden med nytt ettersom det ikke var noen svar her uansett Jeg har løst dette ved å ta koordinatene og ta +50 på hver av y koordinatene, og +5 på hver av x koordinatene, da stemmer det med hvor musepekeren er. Dette burde da ikke være nødvendig, så lurer på om det er noen løsning Jeg har et lett paint program, hvor jeg bruker mousePressed og mouseReleased til å sette xStart, xSlutt, yStart og ySlutt variabler og deretter tegne en form i mellom disse punktene. Problemet derimot er at i høyden blir det feil. Den blå prikken er hvor jeg hadde musepekeren, da den ikke ble med på bildet men strekene over ble generert. Altså blir den generert på feil sted i høyden, altså y koordinatene blir feil. Jeg har sjekket at den returnerer rett skjermstørrelse, koden jeg bruker er s.setyStart(event.getY()); s.setySlutt(event.getY()); Henholdsvis i hver sin listener for pressed og releasedfor å sette variablene. Deretter Line2D line = new Line2D.Double(settings.xStart, settings.yStart, settings.xSlutt, settings.ySlutt); Problemet er som sagt at den genereres på feil sted, er det noe feil i koden? Originalt spørsmål, løst nå tho ved å bruke public static variabel. Jeg vet ikke om tittelen stemmer med det jeg prøver å gjøre, men ihvertfall; tidligere har jeg kun laget programmer i en stor klasse. Nå er jeg ute etter å kunne dele det opp i mindre deler og da støter jeg på et problem. Jeg prøver å lage et lett tegne program, og holder på med en funksjon som skal lagre utgangsposisjonen og sluttposisjonen til et museklikk. Jeg har en fil som er hovedprogrammet som kun lager en instans av GUI filen, og har en fil som kalles tegnePanel som tegner nye figurer, og en fil jeg kaller settings. I settings har jeg double xStart, yStart, xSlutt, ySlutt og tilsvarende get og set metoder. Disse instansieres da ved settings s = new settings(); Problemet er å få tilgang til de samme variablene i både "filen" som tegner og GUI filen. Mouselisteneren ligger i GUI filen, som setter settings.setxStart osv. Men disse blir da ikke videreført til den instansierte settings i filen som tegner. Så selv om i gui versjonen av s så er koordinatene riktige, er de ikke riktige når den prøver å lage figuren, da er de kun 0,0,0,0 som da gir ingen figur. Hvordan løser man dette? Har søkt litt rundt, men vet ikke helt hvordan jeg skal ordlegge meg. Bare å spørre om det er uforståelig. Endret 9. april 2010 av Cemi Lenke til kommentar
Unlimited LTD Skrevet 9. april 2010 Del Skrevet 9. april 2010 Hadde vært en fordel om du postet koden din. Hvertfall det som gav deg problemer. Da kunne vi nok svart på begge spørsmålene dine. Vil tro at det andre problemet ditt har noe med at du ikke har samme instans av Settings klassen i de to andre klassene dine. Det første problemet mangler vi nok en del opplysninger på. Kan ha noe med at du kanskje har registrert mouseListener til feil container(Frame containeren istedet for Panel containeren). Da vil du få en offset på omtrent 50 pixler i y, og 5 i x. Dette vil da kun gjelde for Vista/W7, men ikke for andre OS som OSX eller Linux, eller på Windows XP (eller W7 med themes). Lenke til kommentar
Cemi Skrevet 9. april 2010 Forfatter Del Skrevet 9. april 2010 (endret) Løst, så da forsvant koden. Endret 9. april 2010 av Cemi Lenke til kommentar
Unlimited LTD Skrevet 9. april 2010 Del Skrevet 9. april 2010 (endret) Prøv å poste hele koden. Jeg lagde en enkel applikasjon som gjør omtrentlig det du ber om. (Meget dårlig implementering av MousePanel klassen. Aldri tegn direkte på skjermen slik som jeg gjør det med mindre du har en meget god grunn.) import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JFrame; import javax.swing.JPanel; public class Main { JFrame frame; MousePanel pane; public Main() { frame = new JFrame("Paint"); frame.setBounds(100, 100, 1200, 600); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pane = new MousePanel(); frame.setContentPane(pane); frame.setVisible(true); pane.addMouseListener(new MouseListener() { Point start; public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { if (start == null) start = e.getPoint(); } public void mouseReleased(MouseEvent e) { pane.paint(start, e.getPoint()); start = e.getPoint(); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }); } public static void main(String[] args) { new Main(); } } class MousePanel extends JPanel { public void paint(Point start, Point stop) { // Change this code to use doublebuffering and a BufferedImage instead of drawing directly at the canvas! Graphics g = this.getGraphics(); //Evt. cast to Graphics2D g.drawLine(start.x, start.y, stop.x, stop.y); } } Endret 9. april 2010 av Fluesoppen Lenke til kommentar
Cemi Skrevet 9. april 2010 Forfatter Del Skrevet 9. april 2010 (endret) Løst, så da forsvant koden. Endret 9. april 2010 av Cemi Lenke til kommentar
Unlimited LTD Skrevet 9. april 2010 Del Skrevet 9. april 2010 Fint om du poster Settings klassen også. Lenke til kommentar
Cemi Skrevet 9. april 2010 Forfatter Del Skrevet 9. april 2010 Figured at den ikke var veldig nødvendig, men den inneholder: + get og set metoder for hver enkelt. public static int width = 10; public static int height = 10; public static Dimension size = new Dimension(width,height); public static boolean contour; public static Color color = Color.blue; public static String shape = "oval"; public static double xStart = 0; public static double yStart = 0; public static double xSlutt = 0; public static double ySlutt = 0; public static boolean fill = false; Regner med du vet hva get og set metoder er, men isf. public double getyStart() { return yStart; } public void setyStart(double yStart) { this.yStart = yStart; } og like for alle bare med andre navn. Lenke til kommentar
Unlimited LTD Skrevet 9. april 2010 Del Skrevet 9. april 2010 Poenget er at jeg har hverken ork eller tid til å lage alle disse, og sørge for at det fungerer riktig. Ønsker bare å debugge programmet for å finne feilen. Lenke til kommentar
Cemi Skrevet 9. april 2010 Forfatter Del Skrevet 9. april 2010 (endret) Løst problemet, men ellers mange takk for at du tok tiden til å svare! Endret 9. april 2010 av Cemi Lenke til kommentar
Unlimited LTD Skrevet 9. april 2010 Del Skrevet 9. april 2010 Fant du feilen? Jeg ser her at du kaller på getGraphics() i mouseReleased() og sender den til en annen komponent. Der er feilen din tror jeg. Men hvis du fikset det så er det greit. 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å