2012-12-12, 13:59
  #1
Medlem
Hej!

jag förstår inte vad jag gör för fel

Kod:
g.fillRect(r1.getXPostion(),r1.getYPostion(),r1.getBredd(),r1.getHöjd());   
         
g.fillRect(r2.getXPostion(),r2.getYPostion(),r2.getBredd(),r2.getHöjd()); 

Programmet kan inte hitta någon av metoderna getXPostion, getYPostion, getBredd, getHöjd.

Någon snäll person som kan förklara varför?

Koden i sin helhet

Citera
2012-12-12, 14:28
  #2
Medlem
DennisReynoldss avatar
Metoderna ligger ju i din inre klass Rektangel4 och inte i huvudklassen Rektangel4Panel. Förstår inte riktigt varför du har en inre klass där, men ska du kalla metoderna från den får du skriva r1.Rektangel4."metod". Alternativt skapa objekt av den inre klassen istället.

Sen har du även indata till 4 av dina get-metoder som jag gissar måste vara ett fel. De skapar iaf problem då du inte ger någon indata när du kallar dem.

Disclaimer att jag kan vara helt ute och cykla, tag sen jag höll på med Java.
Citera
2012-12-12, 15:11
  #3
Medlem
Jooncs avatar
Rektangel4Panel har ingen metod som heter getXPostion, den finns i klassen Rektangel4.
Fler saker som är helt fel:
Dina get-metoder ska inte ha några argument.
Alla variabelnamn ska vara på engelska.
Du ärver från JPanel, som redan har en hel del liknande metoder.
Klassen Rektangel4Panel skapar två nya Rektangel4Panel-objekt i dess paintComponent, jag tror inte det är vad du vill göra.

Om jag förstått det hela rätt vill du skapa en ny typ av JPanel, som är som en vanlig JPanel med skillnaden att den fyller hela eller delar av panelen med en viss färg (vilket för övrigt kan sättas med tex g.setColor(Color.GREEN); innan g.fillRectangle()
Stämmer detta?
Citera
2012-12-12, 15:22
  #4
Medlem
Tanken är att det ska bli ett horisontellt stapeldiagram

med 2 st olika rektanglar

under varje stapel ska det dessutom stå rektangelns

"Rektangel objekt r" och omkrets och Area.

Som sagt det är tanken, känns som jag är långt ifrån just nu. ska gå igenom dina ändring och se om jag kommer närmare resultatet
Citera
2012-12-12, 15:46
  #5
Medlem
Jooncs avatar
Citat:
Ursprungligen postat av SagaIsabella
Tanken är att det ska bli ett horisontellt stapeldiagram

med 2 st olika rektanglar

under varje stapel ska det dessutom stå rektangelns

"Rektangel objekt r" och omkrets och Area.

Som sagt det är tanken, känns som jag är långt ifrån just nu. ska gå igenom dina ändring och se om jag kommer närmare resultatet

Okej, den här klassen ritar när man kör upp ett stapeldiagram med fem staplar i olika färger.
Fler staplar kan läggas till i main-metoden genom BarChart-funktionen addColumn som bara behöver veta höjden och färgen. Bredden och höjden på panelen justeras efterhand som fler staplar läggs till eller höjden på en ny stapel är större än den tidigare högsta stapeln.


Kod:
import javax.swing.*; 
import java.awt.*; 
import java.util.ArrayList;

public class 
BarChart extends JPanel {

    private static final 
long serialVersionUID 1L;
    private 
ArrayList<Columncolumns;
    private 
int maxHeight 0;
    private static final 
int COLUMN_WIDTH 50;
    private static final 
int COLUMN_MARGIN 20;

    public static 
void main(String[] args){
        
JFrame frame = new JFrame();
        
BarChart r = new BarChart(); 
        
r.addColumn(100Color.GREEN);
        
r.addColumn(200Color.RED);
        
r.addColumn(50Color.BLUE);
        
r.addColumn(123Color.BLACK);
        
r.addColumn(80Color.YELLOW);
        
frame.add(r);
        
frame.pack();
        
frame.setTitle("Stapeldiagram");
        
frame.setVisible(true);
    }

    public 
BarChart(){
        
columns = new ArrayList<Column>();
        
    }
    public 
void paintComponent(Graphics g){
        
super.paintComponent(g);
        for (
int i 0columns.size(); i++){
            
g.setColor(columns.get(i).c);
            
int x i*(COLUMN_WIDTH COLUMN_MARGIN);
            
int y maxHeight columns.get(i).COLUMN_MARGIN;
            
g.fillRect(xyCOLUMN_WIDTHcolumns.get(i).h);
            
g.setColor(Color.BLACK);
            
g.drawString(Integer.toString(columns.get(i).h), xmaxHeight 2*COLUMN_MARGIN);
        }
    } 
    public 
void addColumn(int hColor c){
        
maxHeight maxHeight maxHeight;
        
columns.add(new Column(hc));
        
setPreferredSize(new Dimension((COLUMN_WIDTH COLUMN_MARGIN)*columns.size(),maxHeight 2*COLUMN_MARGIN));
    }

    private class 
Column{
        private 
int h;
        private 
Color c;

        private 
Column(int hColor c){
            
this.h;
            
this.c;
        }
    }

__________________
Senast redigerad av Joonc 2012-12-12 kl. 15:50.
Citera
2012-12-12, 20:46
  #6
Medlem
getHöjd, lol, halva metodnamnet är på engelska medans andra halvan är på svenska
Citera
2012-12-14, 11:22
  #7
Medlem
dethalvabarnets avatar
Citat:
Ursprungligen postat av Un-named
getHöjd, lol, halva metodnamnet är på engelska medans andra halvan är på svenska

Låt TS lärare stå för kritik som TS ej efterfrågar.

Att ställa frågor är att lära sig också, inte få allt serverat på ett fat.
Citera
2012-12-15, 07:58
  #8
Medlem
Om domänen är på svenska kan man visst blanda in svenska i koden, även på getters. I detta fall var det dock fel.
Citera
2012-12-17, 15:30
  #9
Medlem
ok skulle uppskatta lite tips och feedback om jag är på rätt väg eller om allt är helt fel...


Klass/konstrutor/metoder


JPanel

får fortfarande fel att den inte hittar rektangel1.paint(g);...
Citera
2012-12-18, 12:40
  #10
Medlem
Jooncs avatar
Citat:
Ursprungligen postat av SagaIsabella
ok skulle uppskatta lite tips och feedback om jag är på rätt väg eller om allt är helt fel...


Klass/konstrutor/metoder

får fortfarande fel att den inte hittar rektangel1.paint(g);...

Det beror på att du inte har en metod som heter paint i klassen Rectangle. Använd inte heller svenska variabelnamn, bara engelska.
Tilldelningen
farg = farg;
gör absolut ingenting. Du säger bara att den ska ha värdet av sig själv, vilket den redan har. Och vill du verkligen representera en färg med en int? Visserligen räcker en int för att representera en färg med åtta bitar för rött, grönt, blått och alpha (transparens), men jag tror det vore bättre att använda java.awt.Color.

Din metod paintComponent är tom.

Du bör inte skapa rektanglar inuti paintComponent-metoden. Gör trianglar tillhörande panelen medlemsvariabler i stället som deklarerar längst upp och instansieras i konstruktorn. Kolla på mitt förra inlägg. Det gör inte precis det du vill göra, men strukturen är ungefär densamma.

Implementera inte hela metoder på en rad som i:

public int getX(int x){return xp;}

skriv i stället

public int getX(){
return xp;
}

Och varför tar denna metoden ett argument? Se get-metoder som en frågeställning; varför skulle någon behöva skicka med ett int-värde när de frågar om ditt fönsters x-koordinat? Det faktum att du inte använder argumentet borde få dig att inse att det inte behövs.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in