Avatar billede larzy Nybegynder
01. oktober 2002 - 18:02 Der er 5 kommentarer og
1 løsning

AWT - container og component

Jeg har til opgave at skulle vise en hjemmeside på en PDA, dvs jeg har ikke adgang til SWING kun AWT.

Jeg vil vise tekst ved at oprette en tekstkomponent for hvert tekstelement på hjemmesiden og lægge dem alle i en container, som jeg add'er til min Frame. Jeg har lavet et lille test program, og jeg kan simpelthen ikke få den at vise min tekstkomponent.

------------------------------------
import java.awt.*;

public class TextFrame extends Frame{   
    public TextFrame(){
        TextComponent textComponent = new TextComponent("dette er en test");
        Container c = new Container();
        c.add(textComponent);
        setSize(240,320);
        add(c);
        show();
    }   
    public static void main( String args[] ){
        TextFrame tf = new TextFrame();
    }   
}

------------------------------------
import java.awt.*;

public class TextComponent extends Component{
    private String text;
    public TextComponent(String inputText){
        text = inputText;
    }   
    public void paint(Graphics g){
        g.drawString( text, 50, 50 );
    }
}
Avatar billede magoo20000 Nybegynder
01. oktober 2002 - 18:15 #1
Prøv med Container c = getContentPane();
Hvad med en layoutmanager?
Avatar billede =maddog= Nybegynder
01. oktober 2002 - 18:15 #2
et lightweight component bør altid overskrive de to metoder getPreferredSize() og getMinimumSize() så layoutmanegeren har en realistisk chance for at sætte layout. Ellers resikerer du at de for Dimension(0,0) og derved bliver 'usynelige'.
Avatar billede =maddog= Nybegynder
01. oktober 2002 - 18:17 #3
Her er et lw label jeg VED virker i en Applet

class TransparentLabel extends Component {
   
    String label;
    int alignment;
    final static int LEFT = 0;
    final static int RIGHT = 1;
    final static int CENTER = 2;
   
    public TransparentLabel(String label, int alignment) {
        this.label=label;
        this.alignment=(alignment>=LEFT&&alignment<=CENTER)?alignment:LEFT;
    }
    public TransparentLabel() { this("",LEFT); }
   
    public TransparentLabel(String label) { this(label,LEFT); }
   
   
    public void setText(String label) {
        this.label = label;
        invalidate();
        repaint();
    }
   
    public String getText() { return this.label; }
   
    public Dimension getPreferredSize() {
        FontMetrics fm=getFontMetrics(getFont());
        return new Dimension(fm.stringWidth(label)+5,fm.getHeight()+5);
    }

    public Dimension getMinimumSize() {
        FontMetrics fm=getFontMetrics(getFont());
        return new Dimension(fm.stringWidth(label),fm.getHeight());
    }

    public void update(Graphics g) { paint(g); }

    public void paint(Graphics g) {
        Dimension d=getSize();
        g.setColor(getForeground());
        Font font=getFont();
        g.setFont(font);
        FontMetrics fm=getFontMetrics(font);
        int x = (alignment==CENTER)?(d.width-fm.stringWidth(label))/2:(alignment==RIGHT)?(d.width-fm.stringWidth(label))-5:5;
        g.drawString(label,x, d.height-(d.height-fm.getHeight())/2-fm.getMaxDescent());
    }
}
Avatar billede magoo20000 Nybegynder
01. oktober 2002 - 18:18 #4
Som f.eks.
c.setLayout(new BorderLayout());
Avatar billede larzy Nybegynder
02. oktober 2002 - 01:13 #5
tak, =maddog=, så fik jeg det til at funge.....pointene er dine, men jeg kan vist ikke give dig dem før du laver et "svar" på spørgsmålet (dit var en kommentar)
Avatar billede =maddog= Nybegynder
02. oktober 2002 - 02:01 #6
OK, ville lige være sikker på at du havde hvad du skulle bruge. Lightweight komponenter kan være spidsfindige sager.
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