Gå til innhold

Anbefalte innlegg

Skrevet

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 :hmm:

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

}

 

}

Videoannonse
Annonse
Skrevet

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..

Skrevet (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 av v3g4rd
Skrevet

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..

Skrevet

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)


}



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...