---
title: "public void paint, varför anropas den inte?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/74000-public-void-paint-varför-anropas-den-inte"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "Skies"
published: "2003-04-13T18:31:38.000Z"
updated: "2003-04-15T14:38:27.000Z"
replies: 18
views: 426
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/74000-public-void-paint-varför-anropas-den-inte"
---

# public void paint, varför anropas den inte?

## #1 — Skies, 2003-04-13T18:31Z

Tjejen är igång igen  ;) 

Har ändrat i koden sen tidigare idag... så nu har jag ett annat problem. Varför går inte programmet in i paint och ritar ut linjen?

Här kommer koden:

```
[BLUE]

import java.awt.*;
//import java.awt.event.*;

        
       public class Logik
       {
         private Frame f;
	 private Button skapa, svara, skicka_taemot,ta_bort;
	 //private Lyss ly;
	 private Panel p1,p2;
	 private Graphics gr;
	 
	
	
        public Logik()
        {
          //ly=new Lyss(this);
          
          f=new Frame("Mailprogrammet Mail @ It");
          //f.addWindowListener(ly);
          
          skapa=new Button ("Skapa");
          //skapa.addActionListener(ly);
          
          svara=new Button ("Svara");
          //svara.addActionListener(ly);
	  
         skicka_taemot=new Button ("Skicka/Ta emot");
          //skicka_taemot.addActionListener(ly);
          
          ta_bort=new Button ("Ta bort");
          //ta_bort.addActionListener(ly);

	  

	  p1=new Panel();
	  //p2=new Panel();

	  p1.add(skapa);
	  p1.add(svara);
	  p1.add(skicka_taemot);
	  p1.add(ta_bort);
	  //p1.add(Color blue);
	  
	
	  f.setBackground(Color.yellow);
          f.setLayout(new FlowLayout());
          f.add(skapa);
	  f.add(svara);
	  f.add(skicka_taemot);
	  f.add(ta_bort);
	
	  
         f.setSize(600,550);
 	  f.setLocation(100,100);
          f.setVisible(true);
	  
         }
	  
         public void paint(Graphics gr)
	 {
	  gr.setColor(Color.black);
	  gr.drawLine(10,10,100,100);
	}

              public static void main(String[] args)
              {
                   new Logik();
              }
      
}
```

Tacksam för svar!   :)

Permalänk: https://www.webforum.nu/p/74000

## #2 — PeW, 2003-04-13T18:35Z

Du anropar ju inte paint..  ;)

Permalänk: https://www.webforum.nu/p/1010021

## #3 — Skies, 2003-04-13T18:44Z

Nej, jag vet...låter helkonstigt. jag hörde nämligen förut att den inte behövde anropas... men ok, då behövde den det iaf då :)

Testar igen, tack för hjälpen! :)

Permalänk: https://www.webforum.nu/p/1010026

## #4 — Viktor, 2003-04-13T18:48Z

Behöver du inte ärva från någon AWT komponent? Typ Frame eller liknande.

/Viktor

Permalänk: https://www.webforum.nu/p/1010030

## #5 — Skies, 2003-04-13T18:50Z

Ärver jag inte redan allt från awt genom import.java.awt.\*;  ?

Permalänk: https://www.webforum.nu/p/1010032

## #6 — Viktor, 2003-04-13T18:52Z

Nej, ärver gör du genom extends

```
public class Logik extends Frame
{
}
```

Om du är helt ny på Java så tycker jag att du ska börja med consol program och när du har lärt dig grunderna i Java så ska du gå över till fönster programering.

/Viktor

Permalänk: https://www.webforum.nu/p/1010035

## #7 — Skies, 2003-04-13T19:03Z

Jo, jag vet att man ärver med extends...missuppfattade dig, förlåt.

Dessutom har jag lärt mig grunderna i java..var bara ett tag sen som jag höll på med det :)

Permalänk: https://www.webforum.nu/p/1010043

## #8 — xj220, 2003-04-13T22:48Z

Tänkte bara påpeka att du bör anropa repaint och inte paint...

Permalänk: https://www.webforum.nu/p/1010239

## #9 — Skies, 2003-04-14T15:44Z

\*suck\* jag måste va dummare än en kokosboll för tillfället. Får det iaf inte att fungera. Har anropat paint, gick inte, anropade repaint, gick inte det heller :( Förstår inte varför inte linjen ritas ut...

Permalänk: https://www.webforum.nu/p/1010719

## #10 — Viktor, 2003-04-14T17:01Z

Posta lite ny kod så ska det nog gå att lösa :)

/Viktor

Permalänk: https://www.webforum.nu/p/1010772

## #11 — Skies, 2003-04-14T18:21Z

Tack, det vore jättesnällt. Det är säkert hur enkelt som helst, bara att jag inte kan se det :) Man blir lite stirrig efter att ha testat samma sak i 6 timmar ungefär ;)

Nu är inte anropet till paint (eller repaint eller vad det nu ska va) med i koden...

```
[BLUE]
import java.awt.*;
//import java.awt.event.*;

        
             public class Logik 
             {
                 private Frame f;
	 private Button skapa, svara, skicka_taemot,ta_bort;
	 //private Lyss ly;
	 private Panel p1,p2;
	 private Graphics gr;

	
	   public Logik()
                  {
                 //ly=new Lyss(this);
          
                   f=new Frame("Mailprogrammet Mail @ It");
                //f.addWindowListener(ly);
          
                  skapa=new Button ("Skapa");
               //skapa.addActionListener(ly);
          
                 svara=new Button ("Svara");
              //svara.addActionListener(ly);
	  
               skicka_taemot=new Button ("Skicka/Ta emot");
            //skicka_taemot.addActionListener(ly);
          
              ta_bort=new Button ("Ta bort");
           //ta_bort.addActionListener(ly);

	  
                     p1=new Panel();
	  //p2=new Panel();

	  p1.add(skapa);
	  p1.add(svara);
	  p1.add(skicka_taemot);
	  p1.add(ta_bort);
	 
                  f.setBackground(Color.yellow);
                  f.setLayout(new FlowLayout());
                  f.add(skapa);
	  f.add(svara);
	  f.add(skicka_taemot);
	  f.add(ta_bort);

	   
                  f.setSize(600,550);
 	  f.setLocation(100,100);
                  f.setVisible(true);
                }

           public void paint(Graphics gr) // vet inte om gr behövs 
           {
	    
                  gr.setColor(Color.black);
	  gr.drawLine(10,10,100,100);
            }
	  
      public static void main(String[] args)
     {
		   
                   new Logik();
		    
      }
      
}
```

Permalänk: https://www.webforum.nu/p/1010814

## #12 — Viktor, 2003-04-14T18:35Z

Jag tror du hittar svaret på problemet i min första post :)

```
import java.awt.*;

public class Logik extends Frame
{
	//private Frame f;
	private Button skapa, svara, skicka_taemot, ta_bort;
	//private Lyss ly;
	private Panel p1, p2;
	private Graphics gr;

	public Logik()
	{
		//ly=new Lyss(this);
		super("Mailprogrammet Mail @ It");
		//f=new Frame("Mailprogrammet Mail @ It");
		//f.addWindowListener(ly);
		
		addWindowListener(new java.awt.event.WindowAdapter() {
			public void windowClosing(java.awt.event.WindowEvent e) {
				setVisible(false);
				dispose();
				System.exit(0);
			}
		});

		
		skapa= new Button("Skapa");
		//skapa.addActionListener(ly);
		svara= new Button("Svara");
		//svara.addActionListener(ly);
		skicka_taemot= new Button("Skicka/Ta emot");
		//skicka_taemot.addActionListener(ly);
		ta_bort= new Button("Ta bort");
		//ta_bort.addActionListener(ly);
		p1=new Panel();
		//p2=new Panel();
		p1.add(skapa);
		p1.add(svara);
		p1.add(skicka_taemot);
		p1.add(ta_bort);
		setBackground(Color.yellow);
		setLayout(new FlowLayout());
		add(skapa);
		add(svara);
		add(skicka_taemot);
		add(ta_bort);
		setSize(600, 550);
		setLocation(100, 100);
		setVisible(true);
	}
	
	public void paint(Graphics gr) // vet inte om gr behövs 
	{
		super(gr);
		gr.setColor(Color.black);
		gr.drawLine(10, 10, 100, 100);
		gr.drawString("This is working now!",100,100);
	}
	
	public static void main(String[] args)
	{
		new Logik();
	}
}
```

Ändringar som jag har gjort:

\- Logik ärver nu av Frame (annars kan du inte överlagra en metod)
\- Allt som du förut la på f (f.addXXX) lägger du nu direkt med addXXX eftersom Logik nu är en frame så behöver du inte skapa en ny frame.
\- Eftersom det är ett arv så anroppar du super() först i din konstruktor för att sätta titeln på fönstert och initiera fönstret.
\- Jag la även till en window exit funktion så att man inte behöver trycka Ctrl-Alt-Delete för att avsluta programet.

Det är det som jag har gjort och nu anroppas paint som den ska, den anroppar även den överlagrade funktionen först. 

/Viktor

Permalänk: https://www.webforum.nu/p/1010820

## #13 — Skies, 2003-04-14T19:23Z

Tack så hemskt mycket för hjälpen!!!! :)
  Fast en sak hänger jag inte riktigt med på...eller jo jag hänger 
med på vad som  händer och så, men jag förstår inte varför det 
hela plötsligt löste sig bara för att man ärver frame istället för att
göra f=new frame, för det är ju nästan samma sak, eller hur?!
   Lyssnarna, som är nästan enklare, tänkte jag ta senare...men tack för att du fixade "stäng" åt mig ändå ;)

Permalänk: https://www.webforum.nu/p/1010852

## #14 — aasah, 2003-04-14T21:37Z

Så här är det: Du vill att metoden paint(Graphics gr) ska se ut på ett visst sätt. I klassen Frame gör paintmetoden ingenting har jag för mig, den gör i alla fall inte det du vill att den ska göra. Så om du skapar en f = new Frame() så har din f Frames paintmetod. Att du i Logik definierar om paint hjälper inte ett dugg. När metoden paint anropas kommer f's paintmetod=Frames paintmetod att användas. Logiks paintmetod anropas aldrig.

Om du däremot låter Logik vara en subklass till Frame och definierar en paintmetod i Logik, så skriver den över (ersätter) superklassens metod med samma signatur (signatur = namn och inparametrar). När paintmetoden nu körs, kommer din paintmetod att användas i stället för den ursprungliga. Skillnaden är alltså att Logik nu är av typen Frame.

Permalänk: https://www.webforum.nu/p/1010939

## #15 — Skies, 2003-04-14T21:57Z

Ok, då förstår jag lite bättre :)
Fast problemet är nu att den inte känner igen super(gr); - den måste definieras först i konstruktorn. Men gör jag det, då känner den inte igen super(mailprogrammet... );  :(

Permalänk: https://www.webforum.nu/p/1010943

## #16 — niko, 2003-04-14T22:04Z

Viktor menade nog:

```
super.paint(gr);
```

Permalänk: https://www.webforum.nu/p/1010947

## #17 — Skies, 2003-04-14T22:08Z

ÄNTLIGEN!!!!!  \*jublar\* som jag har suttit med denna dumma linje.

Tack alla (för ert tålamod)! :)

Permalänk: https://www.webforum.nu/p/1010949

## #18 — Skies, 2003-04-15T14:16Z

Bestämde mig för att göra i swing istället...

men hur fungerar JSplitPane? Har inte hållt på med den förut...är det samma princip som med paint, att man måste ärva JFrame osv? eller är det bara att lägga in den som allt annat, knappar osv? Jag har testat med båda, men jag får det inte att fungera...tänkte bara så att jag vet vilken av dom som är rätt så kan jag jobba utifrån det sen :)

Permalänk: https://www.webforum.nu/p/1014285

## #19 — Skies, 2003-04-15T14:38Z

Det löste sig...hittade linjen...layouten på knapparna gjorde så att jag dolde den :)

Permalänk: https://www.webforum.nu/p/1014305

---

Tråden på webben: https://www.webforum.nu/amne/java/74000-public-void-paint-varför-anropas-den-inte
