2013-09-05 4 views
0

C'est ce que je veux réaliser enter image description hereMise en page graphique avec des composants Java Swing

je présentation de la grille, ce qui est ce qui a Please ignore the text displayed in textfield

et mon code passe (pas de code complet peut fournir un si nécessaire).

 components.setLayout(new GridLayout(4,0)); 

     components.setBorder(BorderFactory.createTitledBorder("Personal Data")); 

     //Lable to display 
     name.setText("Resident Name"); 
     roomNo.setText("Room Number"); 
     age.setText("Age"); 
     gender.setText("Gender"); 
     careLvl.setText("Care Level"); 


     components.add(name); 
     components.add(textFieldForName); 
     components.add(roomNo); 
     components.add(textFieldForAge); 

     components.add(age); 
     components.add(coForAge); 
     components.add(gender); 
     components.add(coForGender); 
     components.add(careLvl); 
     components.add(coForCareLvl); 

tout heads-up serait grandement apprécié.

+0

pour la conception d'interfaces graphiques statiques, plus particulièrement les formes, vous trouverait beaucoup plus facile de développer visuellement votre interface utilisateur avec un concepteur de formulaires. Si cette option est disponible, j'utiliserais Scene Builder 1.1 pour créer le fichier FXML qui pourrait ensuite être chargé dans Java FX 2.2 pour générer le graphe de l'objet Scène pour votre formulaire GUI. L'utilisation de Scene Builder accélère considérablement le développement des formulaires et supprime la quasi-totalité du code de création de l'interface graphique de votre application et le place dans un fichier XML beaucoup plus facile à gérer. – scottb

+1

@scottb 1- Quelle partie de la question vous fait penser qu'il s'agit de Java FX? 2- À mon humble avis, on devrait apprendre à coder à la main une interface utilisateur avant de se fier à un outil. Il fournit une meilleure compréhension de la façon dont les gestionnaires de disposition fonctionnent et peuvent travailler les uns avec les autres. Oui, j'utilise un éditeur de formulaires tous les jours, je passe aussi beaucoup de temps à créer des interfaces à la main. – MadProgrammer

+0

@MadProgrammer: Enregistrer la rage et lire la partie où il est dit "si cette option est disponible pour vous". La plupart des problèmes ont plus d'une solution et suggérer des approches alternatives est une utilisation valide de SO ... même si l'alternative présente un affront à votre vision personnelle du monde de la façon dont les choses devraient être faites. – scottb

Répondre

1

GridLayout fait exactement cela, il dispose des composants dans une grille, où chaque cellule est un pourcentage de l'espace disponible basé sur les exigences (c.-à-largeur/colonnes et hauteur/rangées).

Jetez un oeil à A Visual Guide to Layout Managers pour des exemples de gestionnaires de disposition de base et ce qu'ils font.

Je vous recommande plutôt de regarder GridBagLayout à la place. C'est le gestionnaire de disposition le plus flexible (et le plus complexe) disponible dans les bibliothèques par défaut.

Par exemple

enter image description here

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class TestLayout31 { 

    public static void main(String[] args) { 
     new TestLayout31(); 
    } 

    public TestLayout31() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 

      JLabel lblRes = new JLabel("Resident Name"); 
      JLabel lblRoomNo = new JLabel("RoomNo"); 
      JLabel lblAge = new JLabel("Age"); 
      JLabel lblGender = new JLabel("Gender"); 
      JLabel lblCare = new JLabel("Care level"); 

      JTextField fldRes = new JTextField("john smith", 20); 
      JTextField fldRoomNo = new JTextField(10); 
      JComboBox cmbAge = new JComboBox(new Object[]{51}); 
      JComboBox cmbGener = new JComboBox(new Object[]{"M", "F"}); 
      JComboBox cmbCare = new JComboBox(new Object[]{"Low"}); 

      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      gbc.anchor = GridBagConstraints.WEST; 
      gbc.insets = new Insets(1, 1, 1, 1); 
      add(lblRes, gbc); 

      gbc.gridx++; 
      gbc.gridwidth = 4; 
      gbc.fill = GridBagConstraints.HORIZONTAL; 
      add(fldRes, gbc); 

      gbc.gridx = 7; 
      gbc.gridwidth = 1; 
      gbc.fill = GridBagConstraints.NONE; 
      add(lblRoomNo, gbc); 

      gbc.gridx++; 
      add(fldRoomNo, gbc); 

      gbc.gridy++; 
      gbc.gridx = 1; 
      add(lblAge, gbc); 
      gbc.gridx++; 
      add(cmbAge, gbc); 
      gbc.gridx++; 
      add(lblGender, gbc); 
      gbc.gridx++; 
      add(cmbGener, gbc); 
      gbc.gridx++; 
      gbc.gridwidth = 2; 
      add(lblCare, gbc); 
      gbc.gridx += 2; 
      gbc.gridwidth = GridBagConstraints.REMAINDER; 
      add(cmbCare, gbc); 

     } 
    } 

} 

composé Mise en page Exemple

Une autre option serait d'utiliser une mise en page de composé. C'est-à-dire, vous séparez chaque section de votre interface utilisateur dans des conteneurs distincts, en vous concentrant sur leurs besoins de mise en page individuels. Par exemple, vous avez deux rangées de champs, qui ne sont pas vraiment en relation les uns avec les autres, alors plutôt que d'essayer de comprendre comment aligner les champs, vous pouvez vous concentrer sur chaque rangée séparément ...

enter image description here

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class TestLayout31 { 

    public static void main(String[] args) { 
     new TestLayout31(); 
    } 

    public TestLayout31() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 

      JPanel topPane = new JPanel(new GridBagLayout()); 

      JLabel lblRes = new JLabel("Resident Name"); 
      JLabel lblRoomNo = new JLabel("RoomNo"); 
      JLabel lblAge = new JLabel("Age"); 
      JLabel lblGender = new JLabel("Gender"); 
      JLabel lblCare = new JLabel("Care level"); 

      JTextField fldRes = new JTextField("john smith", 20); 
      JTextField fldRoomNo = new JTextField(10); 
      JComboBox cmbAge = new JComboBox(new Object[]{51}); 
      JComboBox cmbGener = new JComboBox(new Object[]{"M", "F"}); 
      JComboBox cmbCare = new JComboBox(new Object[]{"Low"}); 

      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      gbc.anchor = GridBagConstraints.WEST; 
      gbc.insets = new Insets(1, 1, 1, 1); 
      topPane.add(lblRes, gbc); 

      gbc.gridx++; 
      gbc.fill = GridBagConstraints.HORIZONTAL; 
      topPane.add(fldRes, gbc); 

      gbc.gridx++; 
      topPane.add(lblRoomNo, gbc); 

      gbc.gridx++; 
      topPane.add(fldRoomNo, gbc); 

      JPanel bottomPane = new JPanel(new GridBagLayout()); 

      gbc.gridx = 0; 
      bottomPane.add(lblAge, gbc); 
      gbc.gridx++; 
      bottomPane.add(cmbAge, gbc); 
      gbc.gridx++; 
      bottomPane.add(lblGender, gbc); 
      gbc.gridx++; 
      bottomPane.add(cmbGener, gbc); 
      gbc.gridx++; 
      bottomPane.add(lblCare, gbc); 
      gbc.gridx++; 
      bottomPane.add(cmbCare, gbc); 

      gbc.gridx = 0; 
      gbc.gridy = 0; 
      gbc.weightx = 1; 
      gbc.fill = GridBagConstraints.HORIZONTAL; 
      add(topPane, gbc); 
      gbc.gridy++; 
      add(bottomPane, gbc); 

     } 
    }   
} 

Ce sera plus facile de modifier l'interface utilisateur si vous devez plus tard ...

+0

Merci buddy Appréciez-le – usrNotFound

+0

Chaque mise en page a des caractéristiques spécifiques, alors que j'ai tendance à utiliser beaucoup 'GridBagLayout', ne négligez pas les autres, ce qui peut produire le même résultat souhaité avec moins de code. Par exemple, dans le deuxième exemple, j'aurais pu utiliser 'GridLayout' configuré avec une seule colonne et deux lignes pour mettre en page les panneaux supérieur et inférieur ... – MadProgrammer

1
JFrame frame = new JFrame(); 
JPanel contentPane = new JPanel(); 
JPanel northPane = new JPanel(); 
JPanel centerPane = new JPanel(); 
JPanel southPane = new JPanel(); 
contentPane.setLayout(new BorderLayout()); 
northPane.setLayout( new GridLayout(1, 6)); 
southPane.setLayout( new GridLayout(1, 7)); 
contentPane.add(northPane, BorderLayout.NORTH); 
contentPane.add(centerPane, BorderLayout.CENTER); 
contentPane.add(southPane, BorderLayout.SOUTH); 
frame.setContentPane(contentPane); 
JLabel   residentNameLabel = new JLabel("Resident name "); 
JTextField  residentNameText = new JTextField(); 
JLabel   roomNoLabel  = new JLabel("RoomNo "); 
JTextField  roomNoText  = new JTextField(); 
JLabel   emptyLabel0  = new JLabel(" "); 
JLabel   emptyLabel1  = new JLabel(" "); 
JLabel   emptyLabel2  = new JLabel(" "); 
JLabel   emptyLabel3  = new JLabel(" "); 
JLabel   ageLabel   = new JLabel("Age "); 
JComboBox<String> ageComboBox  = new JComboBox<String>(); 
ageComboBox.addItem("50"); 
ageComboBox.addItem("51"); 
ageComboBox.addItem("52"); 
ageComboBox.addItem("53"); 
ageComboBox.addItem("54"); 
ageComboBox.addItem("55"); 
JLabel   genderLabel  = new JLabel("Gender "); 
JComboBox<String> genderComboBox = new JComboBox<String>(); 
genderComboBox.addItem("M"); 
genderComboBox.addItem("F"); 
JLabel   careLevelLabel = new JLabel("Care Level "); 
JComboBox<String> careLevelComboBox = new JComboBox<String>(); 
genderComboBox.addItem("low");; 
genderComboBox.addItem("medium"); 
genderComboBox.addItem("high"); 
residentNameLabel.setHorizontalAlignment(JLabel.RIGHT); 
roomNoLabel.setHorizontalAlignment(JLabel.RIGHT); 
ageLabel.setHorizontalAlignment(JLabel.RIGHT); 
genderLabel.setHorizontalAlignment(JLabel.RIGHT); 
careLevelLabel.setHorizontalAlignment(JLabel.RIGHT); 
northPane.add(emptyLabel0  ); 
northPane.add(residentNameLabel); 
northPane.add(residentNameText); 
northPane.add(roomNoLabel  ); 
northPane.add(roomNoText  ); 
northPane.add(emptyLabel1  ); 
centerPane.add(emptyLabel2 ); 
southPane.add(ageLabel  ); 
southPane.add(ageComboBox  ); 
southPane.add(genderLabel  ); 
southPane.add(genderComboBox ); 
southPane.add(careLevelLabel ); 
southPane.add(careLevelComboBox); 
southPane.add(emptyLabel3  ); 
contentPane.setBorder(BorderFactory.createTitledBorder("Personal Data")); 
frame.addWindowListener(new WindowAdapter() { 
@Override 
    public void windowClosing(WindowEvent evt) { 
     System.exit(0); 
    } 
}); 
frame.setVisible(true); 
frame.pack(); 
Questions connexes