2012-04-13 10 views
0

Dies ist, was es gibt:Wie würde ich diese Steuerelemente auf der linken Seite ausrichten?

This is what it outputs :

Ich möchte ausrichten ‚Imprimante: MonImprimante‘ am linken sowie die drei Kontrollkästchen.

Sie den Code relevant für die Dinge finden kann ich durch die Suche *** mit ctrl-f

Dies ist mein Code ausgerichtet werden soll: `

package gui; 

import java.awt.BorderLayout; 
import java.awt.GridLayout; 

import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.JSlider; 

public class ImprimanteWindow extends JFrame{ 

    //Declares the panels used to place the controls. 
private JPanel JPanelBtn; 
private JPanel JPanelChk; 
private JPanel JPanelRad; 
private JPanel JPanelDrpChk; 
private JPanel JPanelWrap; 
private JPanel JPanelSuperWrap; 
private String[] QltImpression = { "Haute", "Medium", "Bas"}; 

public ImprimanteWindow(){ 


    //Initialise the panels 
    JPanelBtn = new JPanel(new GridLayout(4,1, 10, 10)); 
    JPanelChk = new JPanel(new GridLayout(3,1)); 
    JPanelRad = new JPanel(new GridLayout(3,1)); 
    JPanelDrpChk = new JPanel(); 
    JPanelWrap = new JPanel(); //used to put the other panels inside 
    JPanelSuperWrap = new JPanel(); //used to put everything in 1 big panel 

      //Initialise the buttons and add them to the button Panel 
    JPanelBtn.add(new JButton("Ok")); 
    JPanelBtn.add(new JButton("Annuler")); 
    JPanelBtn.add(new JButton("Paramètre")); 
    JPanelBtn.add(new JButton("Aide")); 
    this.add("East", JPanelBtn); 

      //***I want to align this to the far left 
      //adds the check boxes to the checkbox panel 
    JPanelChk.add(new JCheckBox("Image")); 
    JPanelChk.add(new JCheckBox("Texte")); 
    JPanelChk.add(new JCheckBox("Code")); 

      ////adds the radio buttons to the radiobutton panel 
    JPanelRad.add(new JRadioButton("Selection")); 
    JPanelRad.add(new JRadioButton("Tous")); 
    JPanelRad.add(new JRadioButton("Applet")); 

      //***I want to align this to the far left 
      //adds the label to the top section of the panel 
    JPanelSuperWrap.add(new JLabel("Imprimante : MonImprimante")); 

      //adds the 2 panels and the slider to the middle section 
    JPanelWrap.add(JPanelChk); 
    JPanelWrap.add(JPanelRad); 
    JPanelWrap.add(new JSlider()); 
    JPanelSuperWrap.add(JPanelWrap);  

      //adds a label, a combobox and a checkbox to the bottom. 
    JPanelDrpChk.add(new JLabel("Qualite de l'impression :")); 
    JPanelDrpChk.add(new JComboBox(QltImpression)); 
    JPanelDrpChk.add(new JCheckBox("Imprimer dans un fichier")); 
    JPanelSuperWrap.add(JPanelDrpChk); 
    this.add(JPanelSuperWrap); 

    this.pack(); 

    this.setSize(500,170); 
    this.setVisible(true); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    this.validate(); 
} 


public static void main(String args[]){ 
    ImprimanteWindow gui = new ImprimanteWindow(); 

} 
}` 

Jede Hilfe bei der Platzierung der Bedienelemente auf Meine Gui wäre sehr appreciated! Danke Jungs so sehr!

+1

Ich denke, Sie werden einen anderen Layout-Manager als 'GridLayout' verwenden müssen, wenn diese Frage nicht beantwortet wird, nachdem ich das Mittagessen zurück Form zu bekommen, werde ich poste etwas Code. –

+0

Bitte lernen Sie Java Namenskonventionen kennen und bleiben Sie dabei. – kleopatra

Antwort

1

Sie verschärfen das Leben mit verschachtelten Panels, die Layouts mit festem Layout haben, und Wrappern, die dies nicht tun. Wenn Sie die explizite Kontrolle auf der Mikolebene übernehmen und eine bestimmte Anzeigeanforderung (wie Ihre Etikettenhülle) haben, sollten Sie explizite Layouts in JPanelWrap und JPanelSuperWrap haben.

Verwenden Sie auch Layouts, die Ihre Absicht besser kommunizieren. Warum verwenden Sie 3x1 GridLayout in den verschachtelten Komponenten, wenn ein BoxLayout Ihre Absicht besser ausdrückt? Sie tun das Swing-Äquivalent von verschachtelten HTML-<table> Layouts auf diese Weise. Sie können die inneren Panels mit Boxen füllen, da sie einfache Spalten sind, und verwenden Sie ein 2x2 GridBagLayout für JPanelSuperWrap, wobei JPanelBtn 2 Zeilen dauert.

Sie werden wahrscheinlich auch bessere Namen als für das, was diese Panels tatsächlich sind, und Sie sollten wirklich in Betracht ziehen, diese Ansicht in Unterkomponenten, die von ImprimanteWindow instanziiert werden, zu kapseln. Mit anderen Worten, nehmen Sie die Teile wie JPanelBtn Stück und legen Sie es in eine andere Klasse, die semantisch definiert, was diese Gruppierung ist, wie SelectionChoices, dann definieren Sie eine Methode für diese Klasse, die Sie ein JPanel zurückgibt.

0

Jedes Mal, wenn Sie eine JCheckBox, JLabel oder JRadioButton hinzufügen (von nun an als j bezeichnet), versuchen Sie, j.setHorizontalTextAlignment(SwingConstants.LEFT); anzurufen. Ich vermute jedoch, dass dies nicht funktioniert, da Sie GridLayout verwenden, was ein ziemlich unflexibles Layout ist.

Es wäre besser, IHMO, wenn Sie GridBagLayout im JPanels für diese Komponenten verwenden und verwendeten GridBagConstraints das Layout zu sagen, wie diese Komponenten auszurichten, wenn man sich auf ihre jeweiligen Platten hinzuzufügen.

0

Um dies zu tun, können Sie dies nur tun

JPanel scope = new JPanel(); 
scope.setBorder(BorderFactory.createTitledBorder("Scope")); 
scope.setLayout(new BoxLayout(scope,BoxLayout.Y_AXIS)); 
scope.setAlignmentX(Component.LEFT_ALIGNMENT); 
Verwandte Themen