AWT AppletLayout

Status
Nicht offen für weitere Antworten.

du2008

Mitglied
Hallo zusammen, bin neu im Java aber für Profis ist das bestimmt ne kleine Sache.

Ich wollte ein kleines Applet schreiben und etwas Text und 2 Buttons anordnen.

1 Zeile Text (txt)
2 Zeile Button (<), Text (weekday), Button(>)
3 Zeile ermittelte Produkte

und alles schön halbwegs zentriert.

Code wie folgt:
Java:
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ap1 extends Applet implements ActionListener {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Button prev = new Button("<"), next = new Button(">");
    private Label weekday = new Label(""), txt = new Label(""), pro = new Label("");
    private Panel pNorth = new Panel(), pCenter= new Panel();


    

    @Override
    public void init() {
        // TODO Auto-generated method stub
        super.init();
        System.out.println("Java-Konsole: init... !");
        
        txt.setText("txt");
        weekday.setText("weekday");
        pro.setText("pers");
        
        setLayout(new BorderLayout());
        add(BorderLayout.NORTH, pNorth);
        add(BorderLayout.CENTER, pCenter);
                
        pNorth.add(BorderLayout.NORTH,txt);
        pNorth.add(BorderLayout.EAST,prev);
        pNorth.add(BorderLayout.CENTER,weekday);
        pNorth.add(BorderLayout.WEST,next);
        
        pCenter.add(BorderLayout.NORTH, pers);
    
    }

Eigentlich haut alles hin nur das im Panel pNorth alles in einer Zeile erscheint.
Das Label txt sollte als Kopf über den Schaltflächen und dem Label im Center stehen.

Was ist denn da falsch?

Jede Hilfe ist willkommen.:rtfm:
 
Zuletzt bearbeitet von einem Moderator:

Schandro

Top Contributor
du setzt nur den LayoutManager vom Applet ContentPane auf BorderLayout, die beiden Panels haben noch das Standard Layout..

2 kleine Tipps:
Halt dich bei der Namensgebung an die Java Coding Convention:
Variablen und Methodennamen im camelCase
Klassen/Interface namen im CamelCase

d.h. deine Klasse sollte mit einem Großbuchstaben beginnen.

Außerdem sind solche Sachen eher ungebräuchlich und vorallem auch schwer zu lesen:
Java:
private Panel pNorth = new Panel(), pCenter= new Panel();
Jede Variablendeklaration sollte in ihre eigene Zeile

Edit: Und wenn du keinen speziellen Grund für AWT hast, benutz lieber z.b. Swing, ist besser / neuer
 

du2008

Mitglied
na, so wie ich das bisher gelesen habe ist die Contentpane ja immer da und der Rest kommt durch mich.
Ich hatte auch vor dem add auf die Contentpane noch 2 Zeilen davor:

Java:
setLayout(new BorderLayout());
pNorth.setLayout(new BorderLayout());
pCenter.setLayout(new BorderLayout());

dann sah es noch mehr nach Flowlayout aus.


Die Reihenfolge Pane erstellen, Layout bestimmen und Componenten add'en ist doch richtig oder?

AWT muß ich nehmen, wegen Kompabilität zur Datenquelle der Produkte,da kann ich nichts ändern.
 
Zuletzt bearbeitet von einem Moderator:

Ebenius

Top Contributor
Ich hatte auch vor dem add auf die Contentpane noch 2 Zeilen davor:[...]
Das sieht allerdings richtig aus. So sollte es gehen. Teste es doch nochmal. ;)

Die Reihenfolge Pane erstellen, Layout bestimmen und Componenten add'en ist doch richtig oder?
Jupp.

Nur weil ich es eben sehe: Man schreibt:
Java:
panel.add(KOMPONENTE, CONSTRAINT);
... nicht anders herum. Das funktioniert zwar beim BorderLayout (weil dessen Constraints eben Strings sind) auch. Aber es funktioniert bei anderen Layout Managers nicht. Löst Dein Problem natürlich nicht.

Ebenius
 

du2008

Mitglied
jupp,
mit der Schreibweise panel.add(Component, Constraint) habe ich zumindest die Anordnung mit 3 Zeilen hinbekommen.
Schon komisch das Eclipse das nicht anmeckert wenns falsch ist.
Allerdings wollte ich die Textlabel in Zeile 1,2 und 3 mittig ausrichten.
Die CenterOption für die beiden Panels machts jedenfalls nicht so richtig.
Die 2 Buttons bleiben schön Links/ Rechts im Applet wie erwartet, die 3 TextLabels erscheinen dann immer soweit Links wie möglich.
Gibts da irgendeinen Tipp ???:L
 

André Uhres

Top Contributor
mit der Schreibweise panel.add(Component, Constraint) habe ich zumindest die Anordnung mit 3 Zeilen hinbekommen.
Schon komisch das Eclipse das nicht anmeckert wenns falsch ist.
Die Schreibweise add(BorderLayout.CENTER, component) ist nicht falsch aber veraltet. Das Sun Tutorial sagt dazu:

add(component, BorderLayout.CENTER) //preferred
add(BorderLayout.CENTER, component) //valid but old fashioned
add("Center", component) //valid but error prone
 

Ebenius

Top Contributor
Die CenterOption für die beiden Panels machts jedenfalls nicht so richtig.
Doch doch. Die Labels liegen mittig. Sie stellen aber ihren Text linksbündig dar. Das kann man natürlich ändern:
Java:
final JLabel label = new JLabel("Text", SwingConstants.CENTER);
... oder nachträglich:
Java:
label.setHorizontalAlignment(SwingConstants.CENTER);
Ebenius
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben