JFrame Skrevet 20. februar 2007 Skrevet 20. februar 2007 Jeg har fått en kode som tegner et kvadrat. Jeg skal få den til å kunne endre farge ved å legge fargen i en variabel, og bruke get set metoden. Også skal den ha en meny (JMenuBar) i vinduet som gjør at man kan velge 3 forskjellige farger til firkanten. Har sett på det et par dager og forstår koden. Finner eksempler hvor man kan sette inn bakgrunnsfarge (setBackground(Color...), men ikke hvordan man farger linjene til en figur. Er det den : public void setColor(Color nyFarge) man bruker? Jeg kommer liksom ikke i gang og ser ikke hvordan jeg skal angripe problemet Hadde vært fint om noen kunne hjulpet meg i gang. Her er koden. Den er delt opp i 3 deler: public class Program { public static void main(String[] args) { MittVindu mv=new MittVindu(); } } -------------------------------------------------- import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JPanel; public class MittPanel extends JPanel implements MouseListener{ private int x=50; private int y=50; String s="start"; public MittPanel(){ //musetrykk påvirker hele panelet,kilden til hendelsen //er derfor this this.addMouseListener(this); } //denne handlingen utføres hver gang panelet skal tegnes på nytt public void paintComponent(Graphics g){ super.paintComponent(g);//foretar standard initialisering g.drawString(s,10,10); g.drawRect(x,y,30,30); } public void flyttOpp(){ y=y-5; repaint();//tegn på nytt } public void flyttNed(){ y=y+5; repaint(); } public void flyttH(){ x=x+5; repaint(); } public void flyttV(){ x=x-5; repaint(); } public void mousePressed(MouseEvent mevt){ //rektanglet flyttes til der vi trykker med musa s="Pressed"; x=mevt.getX(); y=mevt.getY(); repaint(); } public void mouseClicked(MouseEvent mevt){ //rektanglet flyttes til der vi trykker med musa s="Clicked"; x=mevt.getX(); y=mevt.getY(); repaint(); } public void mouseEntered(MouseEvent mevt){ s="entered"; repaint(); } public void mouseExited(MouseEvent mevt){ s="Exited"; repaint(); } public void mouseReleased(MouseEvent mevt){ s="Releases"; repaint(); } } --------------------------------------------------------- import java.awt.BorderLayout; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class MittVindu extends JFrame { /*Denne må deklarereres som en instansvariabel * fordi den brukes i handlinger som skal gjøres etter * at konstruktøren er ferdig */ MittPanel mp=new MittPanel();//dette skal inneholde tegning //constructor public MittVindu(){ this.setSize(300,200); this.setLocation(100,100); //innholdsfortegnelsen lages ikke, den eies av vinduet //den må hentes Container cp=this.getContentPane(); //panel som skal inneholde knappene JPanel jp_outer=new JPanel(); JPanel jp=new JPanel(); jp_outer.add(jp); //lage de 4 knappene og plassere JButton jb_n=new JButton("^"); JButton jb_s=new JButton("v"); JButton jb_h=new JButton(">"); JButton jb_v=new JButton("<"); //la panelet få gridlayout BorderLayout gl=new BorderLayout(); jp.setLayout(gl); jp.add(jb_n,BorderLayout.NORTH); jp.add(jb_s,BorderLayout.SOUTH); jp.add(jb_h,BorderLayout.EAST); jp.add(jb_v,BorderLayout.WEST); //kobl handlinger til knappene jb_n.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent evt){ //handlingene skal stå her mp.flyttOpp(); } } ); jb_s.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent evt){ //handlingene skal stå her mp.flyttNed(); } } ); jb_h.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent evt){ //handlingene skal stå her mp.flyttH(); } } ); jb_v.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent evt){ //handlingene skal stå her mp.flyttV(); } } ); cp.add(mp,BorderLayout.CENTER);//legg tegnepanel i sentrum cp.add(jp_outer,BorderLayout.EAST); this.setVisible(true);//vis vinduet } }
JFrame Skrevet 20. februar 2007 Forfatter Skrevet 20. februar 2007 Fikk hvertfall farge på figuren og bakgrunnen ved å legge til dette: setBackground(Color.orange); <-- setForeground(Color.blue); <--? g.drawString(s,10,20); setForeground(Color.red);<-- g.drawRect(x,y,30,30); Men hvorfor får strengen samme farge som rektangelet. setForeground(Color.blue); gjør jo ingen nytte nå.. Trenger fortsatt hjelp til å lage en meny med 3 fargealternativer til rektangelet da..
v3g4rd Skrevet 20. februar 2007 Skrevet 20. februar 2007 (endret) Fikk hvertfall farge på figuren og bakgrunnen ved å legge til dette: setBackground(Color.orange); <-- setForeground(Color.blue); <--? g.drawString(s,10,20); setForeground(Color.red);<-- g.drawRect(x,y,30,30); Men hvorfor får strengen samme farge som rektangelet. setForeground(Color.blue); gjør jo ingen nytte nå.. Trenger fortsatt hjelp til å lage en meny med 3 fargealternativer til rektangelet da.. 7981976[/snapback] Jeg synes det var litt rart at du fikk farge på koden ved å skrive inn det. Hvis du vil endre farge på det som blir tegner av PaintComponent (eller g), må du bruke metoden g.SetColor(). For eksempel: g.setColor(Color.blue); Bare husk på å legge til denne koden før du skriver g.draw (et eller annet). Edit: Når det gjaldt det andre spørsmålet ditt om hvordan du endrer farge ved hjelp av knapper, er ikke det noe problem det heller. Først lager du JMenuBaren med JMenu og JMenuItem, hvor JMenuItem'ene fungerer som knapper. Når du har gjort det, legger enkelt og greit til en ActionListener til JMenuItemet, som forteller at du vil endre fargen på PaintComponent. Et eksempel: JMenuItem endreFargeTilBlå = new JMenuItem("Gi meg BLÅ!"); minJMenu.add(endreFargeTilBlå); endreFargeTilBlå.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { g.setColor(Color.Blue); System.out.println("Fargen ble nå satt til blå"); } }); Håper dette var til hjelp for deg:) Skulle du allikevel ikke få det til, kan jeg sende deg en kopi av kildekoden min hvor jeg har laget samme oppgavesett, men det er viktig at du prøver først. Endret 20. februar 2007 av v3g4rd
JFrame Skrevet 20. februar 2007 Forfatter Skrevet 20. februar 2007 Mange takk v3g4rd. Er greit å vite at du har løsningen om jeg ikke får det til. Men jobber med det i dag og i morgen så får vi se.. Jeg regner med du bruker Action listener for å kommnisere mellom vindu og panel. Er ikke helt stødig på der enda, så må se litt mer på det..
JFrame Skrevet 21. februar 2007 Forfatter Skrevet 21. februar 2007 Sliter med å få den: g.setColor(Color.Blue); til å virke. Får opp meny, men får ikke koblet lytteren til Panelet (tror jeg det er som er feil)... import java.awt.BorderLayout; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.Color; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.JButton; // Trenger denne for å lage knappene. (Valgalternativene/pilene). import javax.swing.JFrame; // Trenger denne for å lage rammen. (Firkanten). //import javax.swing.JPanel; // Trenger denne for å lage Panelet. (Vinduet å tegne firkanten i). public class MittVindu extends JFrame { /*Denne må deklarereres som en instansvariabel * fordi den brukes i handlinger som skal gjøres etter * at konstruktøren er ferdig */ MittPanel mp=new MittPanel();//dette skal inneholde tegning //constructor public MittVindu(){ this.setSize(300,200); // 300 er Bredden på vinduet, 200 er Høyden. this.setLocation(100,200); // Plassering av vinduet på skjermen. (100 er sidelengs, 200 er høyden). JMenuBar menylinje = new JMenuBar(); JMenu addmeny = new JMenu( "Velg farge til kvadrat" ); JMenuItem lagInternvindu = new JMenuItem( "Grønn farge" ); addmeny.add(new JMenuItem("Rød farge")); addmeny.add(new JMenuItem("Blå farge")); addmeny.add( lagInternvindu ); menylinje.add( addmeny ); setJMenuBar( menylinje ); lagInternvindu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // g.setColor(Color.Blue); System.out.println("Fargen ble nå satt til blå"); } }); //innholdsfortegnelsen lages ikke, den eies av vinduet //den må hentes Container cp=this.getContentPane(); //panel som skal inneholde knappene JPanel jp_outer=new JPanel(); JPanel jp=new JPanel(); jp_outer.add(jp); //lage de 4 knappene og plassere JButton jb_n=new JButton("^"); // Lager valgalternativ: ^ JButton jb_s=new JButton("v"); // Lager valgalternativ: v JButton jb_h=new JButton(">"); // Lager valgalternativ: > JButton jb_v=new JButton("<"); // Lager valgalternativ: < //la panelet få gridlayout BorderLayout gl=new BorderLayout(); jp.setLayout(gl); jp.add(jb_n,BorderLayout.NORTH); jp.add(jb_s,BorderLayout.SOUTH); jp.add(jb_h,BorderLayout.EAST); jp.add(jb_v,BorderLayout.WEST); //kobl handlinger til knappene jb_n.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent evt){ //handlingene skal stå her mp.flyttOpp(); } } ); jb_s.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent evt){ //handlingene skal stå her mp.flyttNed(); } } ); jb_h.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent evt){ //handlingene skal stå her mp.flyttH(); } } ); jb_v.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent evt){ //handlingene skal stå her mp.flyttV(); } } ); cp.add(mp,BorderLayout.CENTER);//legg tegnepanel i sentrum cp.add(jp_outer,BorderLayout.EAST); this.setVisible(true);//vis vinduet } // public void setColor(Color nyFarge) }
v3g4rd Skrevet 21. februar 2007 Skrevet 21. februar 2007 Sender deg en PM med link til kildekoden min jeg.
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å