Avatar billede muingaza Nybegynder
20. januar 2005 - 17:56 Der er 11 kommentarer

Kan ikke se min tekst i mit frame!

Jeg har følgende kode:

import javax.swing.*;
import java.awt.*;

public class Jubii extends JFrame {

public Jubii(){
JPanel k = new JPanel();
getContentPane().add(k);
setSize(200, 200);
setTitle("Example1");
setVisible(true);




}

public void paintComponent(Graphics g){

g.setColor(Color.red);
g.drawString("Write this text!",10, 10);


}

public static void main(String[] args) {

Jubii d = new Jubii();

}
}

Men jeg kan ikke få den til at vise teksten "Write this text!". Jeg mente at så snart man lavede et nyt JPanel blev metoden paintComponent automatisk kørt.

Jeg kan godt få det til at du hvis jeg extender JPanel istedet for, men vil gerne prøve at få det til at du på denne her måde.
Avatar billede arne_v Ekspert
20. januar 2005 - 18:24 #1
Normalt vil man i Swing adde en JLabel eller lignende til getContentPane()
for at vise tekst i Swing.
Avatar billede kalp Novice
20. januar 2005 - 18:48 #2
foran alt det her

setSize(200, 200);
setTitle("Example1");
setVisible(true);


skal du ikke skrive this.
eller k. ?
Avatar billede repulse Nybegynder
20. januar 2005 - 19:04 #3
import javax.swing.*;
import java.awt.*;

public class Jubii extends JFrame
{
    public Jubii()
    {
        PaintPanel k = new PaintPanel();
        getContentPane().add(k);
        setSize(200, 200);
        setTitle("Example1");
        setVisible(true);
    }
   
    public static void main(String[] args)
    {
        Jubii d = new Jubii();
    }   
}

class PaintPanel extends JPanel
{
    public void paint(Graphics g)
    {
        g.setColor(Color.red);
        g.drawString("Write this text!",10, 10);
    }
}
Avatar billede repulse Nybegynder
20. januar 2005 - 19:05 #4
hehe - havde ikke lige læst det sidste i dit spørgsmål... ups..
Avatar billede arne_v Ekspert
20. januar 2005 - 19:07 #5
Jeg mener stadigvæk at:

getContentPane().add(new JLabel("noget"));

eller

k.add(new JLabel("noget"));

må være det mest swingske
Avatar billede arne_v Ekspert
20. januar 2005 - 19:12 #6
kalp>

this er implicit
Avatar billede kalp Novice
20. januar 2005 - 19:14 #7
sandt nok:)
Avatar billede muingaza Nybegynder
20. januar 2005 - 19:59 #8
Ok jeg kan godt se at man kan få det til at du hvis man laver new JLabel. Men hvad nu hvis jeg gerne vil have udskrevet det som jeg har skrevet nede i min paintComponent metode?
Avatar billede muingaza Nybegynder
20. januar 2005 - 20:27 #9
fandt udaf at jeg bare skulle kalde min metode for paint istedet for paintComponent! Wierd!! Så nu kan jeg få skrevet alt det ud som jeg skriver i min paint metode.

import javax.swing.*;
import java.awt.*;

public class Jubii extends JFrame {
   
    public Jubii(){


        setSize(200, 200);
        setTitle("Jubii");
        setVisible(true);
       
       
       
       
    }
   
    public void paint(Graphics g){
       
        g.setColor(Color.red);
        g.drawString("Write this text!",40, 50);
       
       
    }

    public static void main(String[] args) {
       
        new Jubii();
       
    }
}
Avatar billede _carsten Nybegynder
20. januar 2005 - 21:17 #10
Et par sidebemærkninger, selvom det nok bliver vanskeligt at gøre en meget lang historie kort.

I AWT overrides paint() hvis man vil skrive tekst med drawString eller vil tegne.

I Swing overrides paintComponent() hvis det samme skal gøres, dog lige med undtagelse af Main Windows (JFrame, JApplet, JDialog), disse arver fra deres respektive AWT parents og her overrides paint.

Hvis du vil tegne/skrive i Swing (The Swing Way), så skal du adde et JPanel eller en Canvas til din JFrame og override henholdsvis paintComponent/paint. Samtidig kaldes super.paintComponent(g) så dit JPanel eventuelt ryddes inden der skrives.

Eks.


import javax.swing.*;
import java.awt.*;

public class Jubii extends JFrame {

  public Jubii(){
      getContentPane().add(new PaintPanel());
      setSize(200, 200);
      setTitle("Example1");
      setVisible(true);
  }

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

class PaintPanel extends JPanel{
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setColor(Color.red);
        g.drawString("Write this text!",10, 10);
    }
}
Avatar billede _carsten Nybegynder
20. januar 2005 - 22:38 #11
Glemte vist lige en vigtig ting her, alt afhængig af opgaven vil langt de fleste selvfølgelig vælge:    add(new JLabel("noget"));
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester