Avatar billede simeone Nybegynder
19. oktober 2003 - 17:14 Der er 6 kommentarer og
1 løsning

Tilføjelse af simple rektangler.

Hvis jeg vil tilføje tre cirkler i hhv. west og east og farve dem i tre forskellige farver udfra nedenstående kode, hvad mangler jeg så?

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

  public class Cirkler
  {

    public static void main(String[] args)
    {

      //opret vinduet.
      JFrame frame = new JFrame("Cirkler");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      //tegn mit navn.
      JLabel helloLabel = new JLabel("Hello");
      helloLabel.setOpaque(true);
      helloLabel.setBackground(Color.white);
      helloLabel.setForeground(Color.black);

      //Tegn cirklerne i venstre side
      JLabel westLabel = new JLabel(Color.red,Color.green,Color.blue);
      westLabel.setOpaque(true);
      westLabel.setBackground(Color.white);

      //Tegn cirklerne i højre side
      JLabel eastLabel = new JLabel(Color.red,Color.green,Color.blue);
      eastLabel.setOpaque(true);
      eastLabel.setBackground(Color.white);

      //tilføj label til content pane.
      frame.getContentPane().add(westLabel, BorderLayout.WEST);
      frame.getContentPane().add(helloLabel, BorderLayout.CENTER);
      frame.getContentPane().add(eastLabel, BorderLayout.EAST);

      //Vis vinduet.
      frame.pack();
      frame.setVisible(true);

    }
  }
Avatar billede arne_v Ekspert
19. oktober 2003 - 17:20 #1
Lav en klasse som extender f.eks. JLabel og override paint og brug
Graphics drawOval eller fillOval til at lave cirkler med.
Avatar billede arne_v Ekspert
19. oktober 2003 - 17:22 #2
paintComponent - ikke paint.
Avatar billede simeone Nybegynder
19. oktober 2003 - 17:36 #3
hmm, når jeg gør det, får jeg at vide, at der mangler en <identifier> efter fillOval???
Avatar billede arne_v Ekspert
19. oktober 2003 - 17:48 #4
Hm. Jeg kunne heller ikke få JLabel til at virke, men JPanel virker:

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

  public class Cirkler
  {

    public static void main(String[] args)
    {

      //opret vinduet.
      JFrame frame = new JFrame("Cirkler");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      //tegn mit navn.
      JLabel helloLabel = new JLabel("Hello");
      helloLabel.setOpaque(true);
      helloLabel.setBackground(Color.white);
      helloLabel.setForeground(Color.black);

      //Tegn cirklerne i venstre side
      JPanel westLabel = new MyCircle(Color.red);
      westLabel.setOpaque(true);
      westLabel.setBackground(Color.white);
       
      //Tegn cirklerne i højre side
      JPanel eastLabel = new MyCircle(Color.blue);
      eastLabel.setOpaque(true);
      eastLabel.setBackground(Color.white);

      //tilføj label til content pane.
      frame.getContentPane().add(westLabel, BorderLayout.WEST);
      frame.getContentPane().add(helloLabel, BorderLayout.CENTER);
      frame.getContentPane().add(eastLabel, BorderLayout.EAST);

      //Vis vinduet.
      frame.pack();
      frame.setVisible(true);
     

    }
  }
 
class MyCircle extends JPanel {
    private Color c;
    public MyCircle(Color c) {
        this.c = c;
        this.setPreferredSize(new Dimension(100,100));
    }
    public void paintComponent(Graphics g) {
        g.setColor(c);
        g.fillOval(0, 0, 100, 100);
    }
}
Avatar billede simeone Nybegynder
19. oktober 2003 - 18:19 #5
Ja, så langt var jeg faktisk også nået i et tidligere forsøg, men det der har drillet mig hele tiden er, at der skal være tre forskelligfarvede cirkler ved siden af hinanden i både east og west, og det er dér, det går galt ved kompileringen. Umiddelbart ville jeg tro, at alle tre farver skulle være defineret som parametre i klassen cirkler, hvor det nu kun er hhv. rød og blå i hver side, der er defineret. Men det kan jeg ikke få til at virke... :-(
Avatar billede arne_v Ekspert
19. oktober 2003 - 19:12 #6
Måske noget ligesom:

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

  public class Cirkler
  {

    public static void main(String[] args)
    {

      //opret vinduet.
      JFrame frame = new JFrame("Cirkler");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      //tegn mit navn.
      JLabel helloLabel = new JLabel("Hello");
      helloLabel.setOpaque(true);
      helloLabel.setBackground(Color.white);
      helloLabel.setForeground(Color.black);

      //Tegn cirklerne i venstre side
      JPanel westLabel = new JPanel();
      westLabel.setLayout(new GridLayout(3, 1));
      westLabel.add(new MyCircle(Color.red));
      westLabel.add(new MyCircle(Color.red));
      westLabel.add(new MyCircle(Color.red));
       
      //Tegn cirklerne i højre side
      JPanel eastLabel = new JPanel();
      eastLabel.setLayout(new GridLayout(3, 1));
      eastLabel.add(new MyCircle(Color.blue));
      eastLabel.add(new MyCircle(Color.blue));
      eastLabel.add(new MyCircle(Color.blue));

      //tilføj label til content pane.
      frame.getContentPane().add(westLabel, BorderLayout.WEST);
      frame.getContentPane().add(helloLabel, BorderLayout.CENTER);
      frame.getContentPane().add(eastLabel, BorderLayout.EAST);

      //Vis vinduet.
      frame.pack();
      frame.setVisible(true);
     

    }
  }
 
class MyCircle extends JPanel {
    private Color c;
    public MyCircle(Color c) {
        this.c = c;
        this.setPreferredSize(new Dimension(100,100));
    }
    public void paintComponent(Graphics g) {
        g.setColor(c);
        g.fillOval(0, 0, 100, 100);
    }
}
Avatar billede simeone Nybegynder
19. oktober 2003 - 20:35 #7
Damn, hvor simpelt!!! Jeg havde godt overvejet den med gridlayout, men jeg var ikke sikker på, hvordan den ville passe, så jeg forkastede den igen...

Men tak for hjælpen =:o)
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