Avatar billede dennism Nybegynder
07. november 2006 - 09:10 Der er 6 kommentarer og
1 løsning

Java: Alternativ JLabel

Jeg har lavet denne lille klasse:

_________________________________________
package HorseBetting;

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

public class CustomJLabel extends JLabel {

    public JLabel CustomJLabel(String text) {
        JLabel label = new JLabel(text);
        return label;       
    }
   
    public JLabel CustomJLabel(String text, Color color) {
        JLabel label = new JLabel(text);
        label.setBackground(color);
        return label;       
    }
   
}
_________________________________________

Jeg forsøger nu at oprette en objekt af denne type på følgende måde:

centerCenterPanel.add(new CustomJLabel("Løbnummer"));
centerCenterPanel.add(new CustomJLabel("1", new Color(255,255,255)));

Men jeg får at vide, at disse konstruktører ikke findes.
Hvordan kan det være?

Er det fordi en kontruktør SKAL have returtype void? Hvordan kan jeg så gøre det jeg ønsker? Altså at kunne lave en JLabel-objeck med en anden baggrundsfarve uden at have en reference til objektet?

På forhånd tak!

Beklger, men har ikke flere point.
Avatar billede winners79 Nybegynder
07. november 2006 - 14:33 #1
Du skal aldrig erklære en retur type på en konstruktor, dvs :
og derfor skal du nok ændre lidt i arkitekturen

private JLabel label;

  public CustomJLabel(String text, Color color) {
        Jlabel = new JLabel(text);
        label.setBackground(color); 
    }

    public CustomJLabel(String text) {
        label = new JLabel(text);     
    }

public JLabel getLabel(){
return label;
}

også på din brugerflade:
CustomJLabel label1 = new CustomJLabel("Løbnummer")
CustomJLabel label2 = new CustomJLabel("1", new Color(255,255,255))
centerCenterPanel.add(label1.getLabel());
centerCenterPanel.add(label2.getLabel());
Avatar billede dennism Nybegynder
07. november 2006 - 15:11 #2
Ja, den måde kunne jeg også godt selv finde frem til. Men man kan altså ikke skaffe en reference til objektet, hvis man vil bare laver:
centerCenterPanel.add(new CustomJLabel("Løbnummer"));
Avatar billede winners79 Nybegynder
07. november 2006 - 15:58 #3
import java.awt.Color;

import javax.swing.JLabel;

public class CustomJLabel extends JLabel{

        public CustomJLabel(String text) {
            super(text);   
        }
       
        public CustomJLabel(String text,Color color) {
            super(text);
            super.setForeground(color);
        }

}

test:




import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JFrame;

public class TestAfCustomJLabel {

    /**
    * @param args
    */
    public static void main(String[] args) {
   
        JFrame jframe = new JFrame();
       
        jframe.add(new CustomJLabel("Min Egen Label"),BorderLayout.SOUTH);
       
        jframe.add(new CustomJLabel("Super", Color.red),BorderLayout.NORTH);
       
        jframe.pack();
       
        jframe.setVisible(true);

    }

}
Avatar billede dennism Nybegynder
07. november 2006 - 16:04 #4
Tak, det var det jeg manglede.
Men det er simpelthen super der klarer den? Hvordan virker super?
Avatar billede winners79 Nybegynder
07. november 2006 - 16:09 #5
super gør at du kan kalde konstruktoren på den Superklasse som du nedarver fra, i dette tilfælde JLabel. Desuden kan du også bruger super til at køre eventuelle metoder som tilhører Superklassen.

Du kunne også bare programmere nogle af metoderne selv og overskrive superklassens, men det er der jo ingen grund til lige her:)
Avatar billede dennism Nybegynder
26. november 2006 - 18:17 #6
Smider du et svar, Carsten?
Avatar billede winners79 Nybegynder
26. november 2006 - 19:05 #7
:)
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