2016-10-29 1 views
0

La colonne gauche est ce que je fais référence ici:Colonne de GroupLayout est Unaligned

https://i.stack.imgur.com/zXIcF.png

Il y a environ une semaine, je convaincu mon père de fossé de Windows 10 en faveur de Linux Mint. La transition a été assez cahoteuse jusqu'à présent, considérant qu'il aime avoir une interface simpliste. Il ne veut pas travailler avec la ligne de commande, donc j'ai passé la meilleure partie de la journée à essayer de créer une interface utilisateur Java, il va donc arrêter de se moquer de la façon dont il ne peut pas exécuter un script. Je veux que ce soit parfait, cependant, et ce désalignement m'ennuie énormément. Honnêtement, je ne comprends pas ce qui est différent dans cette colonne par rapport aux autres.

Voici ma méthode de format, qui fait tous les trucs GroupLayout

private void format() { 
    GroupLayout layout = new GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setAutoCreateGaps(true); 
    layout.setAutoCreateContainerGaps(true); 

    layout.setHorizontalGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup(LEADING)) 
       .addComponent(inputLabel) 
       .addComponent(outputLabel) 
       .addComponent(exitButton) 
      .addGroup(layout.createParallelGroup(LEADING) 
        .addComponent(inputTextField, 300, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
        .addComponent(outputTextField, 300, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
        ) 
      .addGroup(layout.createParallelGroup(LEADING).addComponent(inputButton).addComponent(outputButton) 
        .addComponent(compressButton))); 

    layout.linkSize(SwingConstants.HORIZONTAL, inputButton, outputButton); 

    layout.setVerticalGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup(LEADING) 
        .addComponent(inputLabel) 
        .addComponent(inputTextField, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
        .addComponent(inputButton)) 
      .addGroup(layout.createParallelGroup(LEADING) 
        .addComponent(outputLabel) 
        .addComponent(outputTextField, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
        .addComponent(outputButton)) 
      .addGroup(layout.createParallelGroup(LEADING) 
        .addComponent(exitButton) 
        .addComponent(compressButton))); 

    setTitle("PDF CONVERTER"); 
    pack(); 
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
} 

Toute aide serait grandement appréciée. Merci d'avance!

+0

Je ne l'ai jamais appris à lire le code GroupLayout généré par un IDE. Pour une raison, le code n'est pas portable si vous passez à un autre IDE. L'outil glisser/déposer génère un code différent. Une solution simple est d'utiliser un 'GridBagLayout', alors vous êtes en plein contrôle de votre disposition de grille simple. Lisez la section du tutoriel Swing sur [Comment utiliser GridBagLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html) pour obtenir des informations et des exemples. – camickr

+0

Vous faites un mauvais service aux gens en recommandant le GridBagLayout démodé et terrible. –

Répondre

1

Le problème se situe dans le groupe de disposition horizontal. Vous n'avez pas terminé les deux premiers groupes avec une parenthèse fermante à droite.

J'ai également amélioré le code un peu. J'ai supprimé la croissance verticale des champs de texte avec un alignement de ligne de base dans un groupe vertical.

De même, il est préférable de définir le nombre de colonnes attendues dans un champ de texte plutôt que de coder en dur la taille minimale dans une mise en page.

package com.zetcode; 

import java.awt.EventQueue; 
import javax.swing.GroupLayout; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import static javax.swing.JFrame.EXIT_ON_CLOSE; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
import javax.swing.SwingConstants; 

public class PdfConverterEx extends JFrame { 

    public PdfConverterEx() { 

     initUI(); 
    } 

    private void initUI() { 

     JLabel inputLabel = new JLabel("Input:"); 
     JLabel outputLabel = new JLabel("Output:"); 

     JTextField field1 = new JTextField(25); 
     JTextField field2 = new JTextField(25); 

     JButton browseBtn1 = new JButton("Browse"); 
     JButton browseBtn2 = new JButton("Browse"); 

     JButton exitBtn = new JButton("Exit"); 
     JButton compressBtn = new JButton("Compress"); 

     createLayout(inputLabel, outputLabel, field1, field2, 
       browseBtn1, browseBtn2, exitBtn, compressBtn); 

     setTitle("PDF Converter"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 

    } 

    private void createLayout(JComponent... arg) { 

     GroupLayout layout = new GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setAutoCreateGaps(true); 
     layout.setAutoCreateContainerGaps(true); 

     layout.setHorizontalGroup(layout.createSequentialGroup() 
       .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING) 
         .addComponent(arg[0]) 
         .addComponent(arg[1]) 
         .addComponent(arg[6])) 
       .addGroup(layout.createParallelGroup() 
         .addComponent(arg[2]) 
         .addComponent(arg[3])) 
       .addGroup(layout.createParallelGroup() 
         .addComponent(arg[4]) 
         .addComponent(arg[5]) 
         .addComponent(arg[7])) 
     ); 

     layout.linkSize(SwingConstants.HORIZONTAL, arg[5], arg[6]); 

     layout.setVerticalGroup(layout.createSequentialGroup() 
       .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
         .addComponent(arg[0]) 
         .addComponent(arg[2]) 
         .addComponent(arg[4])) 
       .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
         .addComponent(arg[1]) 
         .addComponent(arg[3]) 
         .addComponent(arg[5])) 
       .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
         .addComponent(arg[6]) 
         .addComponent(arg[7]))); 

     pack(); 

    } 

    public static void main(String[] args) { 

     EventQueue.invokeLater(() -> { 
      PdfConverterEx ex = new PdfConverterEx(); 
      ex.setVisible(true); 
     }); 
    } 
} 

Bonne chance pour la transition vers Linux. :)

Voici une capture d'écran:

enter image description here

+0

Merci un paquet, mec! Je n'avais même pas remarqué que l'on faisait une petite parenthèse. J'ai augmenté votre réponse, mais mon représentant est trop faible pour montrer. Je me suis dit qu'il fallait que tu le saches. – Discordance