webForumDet fria alternativet

BorderLayout()

10 svar · 247 visningar · startad av LAMP

LAMPMedlem sedan mars 2002777 inlägg
#1

Jag sitter och leker lite med en applet och jag är jävligt novis på java. Jag vill att det ska se ut så här:

texten | textfältet | knapp | knapp

nu tar en knapp upp hela utrymmet i South, varför?

// Test.java

import java.awt.*;

public class Test extends java.applet.Applet {

  BorderLayout layout = new BorderLayout();

     Button send = new Button("Skicka!");
     Button delete = new Button("Radera!");
     TextField writeMessage = new TextField();
     Label textMessage = new Label("Meddelande: ");

public void init() {

  setLayout(layout);

    add("South", textMessage);
    add("South", writeMessage);
    add("South", send);
    add("South", delete);

}

}
jmeMedlem sedan maj 20012 237 inlägg
#2

hmm...om jag vet rätt så kan du inte ha fler än en(1) "South".

Testa med att göra så här istället:

FlowLayout layout = new FlowLayout();

...
...
...

add.(textMessage);
add.(writeMessage);
add.(send);
add.(delete);

LAMPMedlem sedan mars 2002777 inlägg
#3

Tack, isåfall får det bli GridBagLayout, för jag ska ha en massa annat också.

LAMPMedlem sedan mars 2002777 inlägg
#4

Ursprungligen av jme **hmm...om jag vet rätt så kan du inte ha fler än en(1) "South".

Testa med att göra så här istället:

FlowLayout layout = new FlowLayout();

...
...
...

add.(textMessage);
add.(writeMessage);
add.(send);
add.(delete);**

varför har du en punkt efter add?

jmeMedlem sedan maj 20012 237 inlägg
#5

oj, ett fel av mig....

Om du vill använda BorderLayout så kan du ju lägga in alla komponenter du vill ha bredvid varanda, i en Panel och sedan adda den....

Panel pane = new Panel();

public void init() {
...

pane.add(delete);
pane.add(textMessage);
add("South", pane);

LAMPMedlem sedan mars 2002777 inlägg
#6

Är jag fel på det?

import java.awt.*;

public class Test extends java.applet.Applet {

  BorderLayout layout = new BorderLayout();
  Panel panelBottom = new Panel(layout);

     Button send = new Button("Skicka!");
     Button delete = new Button("Radera!");
     TextField writeMessage = new TextField();
     Label textMessage = new Label("Meddelande: ");

public void init() {

  panelBottom.setLayout(layout);

    panelBottom.add(textMessage);
    panelBottom.add(writeMessage);
    panelBottom.add(send);
    panelBottom.add(delete);
    add("South",panelBottom);

}

}
spangoMedlem sedan juni 20008 205 inlägg
#7
public void init() {
    panelBottom.setLayout(layout);
    panelBottom.add(textMessage);
    panelBottom.add(writeMessage);
    panelBottom.add(send);
    panelBottom.add(delete);
    [b]add(panelBottom, "South");[/b]
}
LAMPMedlem sedan mars 2002777 inlägg
#8

Har jag gjort fler misstag? Nu visar den ingenting, bara en grå ruta, efter din ändring spango.

import java.awt.*;

public class Test extends java.applet.Applet {

  BorderLayout layout = new BorderLayout();
  Panel panelBottom = new Panel(layout);

     Button send = new Button("Skicka!");
     Button delete = new Button("Radera!");
     TextField writeMessage = new TextField();
     Label textMessage = new Label("Meddelande: ");

public void init() {

    panelBottom.setLayout(layout);
    panelBottom.add(textMessage);
    panelBottom.add(writeMessage);
    panelBottom.add(send);
    panelBottom.add(delete);
    add(panelBottom, "South");

}

}

En fråga till. Vad är skillnaden på:

public class Test extends Applet implements Runnable {

och så som jag skrivit, förutom att jag slipper importera paketet java.applet.Applet i den undre?

public class Test extends java.applet.Applet {
spangoMedlem sedan juni 20008 205 inlägg
#9

Ah, du borde skriva så här i stället:

import java.awt.*;

public class Test extends java.applet.Applet {

    Panel panelBottom;
    Button send;
    Button delete;
    TextField writeMessage;
    Label textMessage;
    
    public void init() {
	setLayout(new BorderLayout()); // BorderLayout-objektet behöver inte sparas
	panelBottom = new Panel(); // Får FlowLayout som layoutmanager
	send = new Button("Skicka!");            // Sen brukar man
	delete = new Button("Radera!");          // inte initiera
	writeMessage = new TextField();          // objekt innan
	textMessage = new Label("Meddelande: "); // de behövs
	panelBottom.setLayout(layout);
	panelBottom.add(textMessage);
	panelBottom.add(writeMessage);
	panelBottom.add(send);
	panelBottom.add(delete);
	add(panelBottom, "South");
    }
}

Det är appleten som ska ha borderlayout, inte panelen som ska placeras i syd.

En fråga till. Vad är skillnaden på:

Den enda praktiska skillnaden blir att du i exempel två inte implementerar Runnable :)

LAMPMedlem sedan mars 2002777 inlägg
#10

du é kung Spango!

det fungerade efter jag tagit bort raden:
panelBottom.setLayout(layout);

Jag har ytterligare en fråga:

writeMessage = new TextField();

skapar ett textfält med obegränsat antal tecken.

writeMessage = new TextField(100);

skapar ett textfält med plats till 100 tecken.

Nu till frågan, textfältet blir väldigt kort, typ 3 tecken långt, hur gör jag för att få det till en viss längd?

LAMPMedlem sedan mars 2002777 inlägg
136 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)