4 Stimmen

Java Swing - JLabel Standort

Ich habe ein Problem bei der Einstellung des Jlabel-Standorts.
Ich habe den Inhaltsbereich auf ein JPanel gesetzt, das ich erstellt und versucht habe, mein JLabel hinzuzufügen.

    JLabel mainTitle = new JLabel("SomeApp");
    mainTitle.setFont(new Font("Arial",2 , 28));
    mainTitle.setBounds(0,0, 115, 130);
    getContentPane().add(mainTitle);

Ich möchte, dass mein JPanel in der linken oberen Ecke meiner Anwendung ist, und was ich bekomme, ist "SomeApp" in der oberen Mitte (und nicht oben links).

btw ich habe versucht JButton hinzuzufügen und ich kann die Breite, Höhe, x,y des JButtons nicht ändern.

3voto

OscarRyz Punkte 189898

Swing verwendet Layout-Manager um die Komponenten zu platzieren.

Man muss verstehen, wie sie funktionieren, um sie effektiv zu nutzen. Sie können den Layout-Manager auf Null setzen und das Layout selbst erstellen, aber das ist nicht empfehlenswert, da Sie jedes Mal neue Komponenten verfolgen und die Layout-Berechnung selbst durchführen müssen, wenn das Fenster geschrumpft wird usw.

Layout-Manager sind anfangs etwas schwer zu fassen.

So könnte Ihr Windows aussehen:

as simple as this

Verwenden Sie diesen Code:

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

class JLabelLocation  {

    public static void main( String [] args ) {

        JLabel mainTitle = new JLabel("SomeApp");
        mainTitle.setFont(new Font("Arial",2 , 28));
        //mainTitle.setBounds(0,0, 115, 130); //let the layout do the work

        JFrame frame = new JFrame();
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));// places at the left
        panel.add( mainTitle );

        frame.add( panel );// no need to call getContentPane
        frame.pack();
        frame.setVisible( true );

    }
}

1voto

Jonathan M Davis Punkte 35765

Wo ein bestimmtes Widget in seinem Container landet, hängt von dem verwendeten Layout-Manager ab. Der Layout-Manager bestimmt, wie die Widgets in der Größe verändert und angeordnet werden müssen, damit sie angemessen Platz finden. Offensichtlich hat das Standardlayout für den Inhaltsbereich entschieden, dass die obere Mitte der beste Platz für das JLabel ist.

Wenn Sie keinen Layout-Manager verwenden und alles selbst platzieren wollen (was im Allgemeinen nicht die beste Art ist, Dinge zu platzieren), dann fügen Sie hinzu:

getContentPane().setLayout(null);

0voto

ZeBlob Punkte 11

Die Verwendung von Layouts ist in der Regel eine bessere Idee, da sie eine dynamische Größenänderung von Komponenten ermöglichen. Hier ist, wie Sie es mit einem BorderLayout tun würde:

this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add (new JLabel ("Main title"), BorderLayout.NORTH);

Wenn Sie rechts von der Beschriftung etwas hinzufügen möchten, können Sie ein zusätzliches Feld mit eigenem Layout erstellen:

// Create a panel at the top for the title and anything else you might need   
JPanel titlePanel = new JPanel (new BorderLayout());
titlePanel.add(new JLabel ("Main title"), BorderLayout.WEST);

// Add the title panel to the frame
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(titlePanel, BorderLayout.CENTER);

Hier sind einige nützliche Links, um mit Layouts zu beginnen:

http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/layout/visual.html http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/layout/using.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X