2010-11-30 7 views
2

Je suis en train de faire une interface graphique qui ressemble à ceci: Question de faire une interface graphique JAVA d'un certain format

Je ne sais comment utiliser le BorderLayout qui a l'espace pour 5 boutons. Nord, Ouest, Centre, Est et Sud.

Depuis que je dois avoir 6 composants sur la première ligne, cette approche ne peut pas fonctionner. Je ne suis pas sûr de savoir comment faire en sorte que je puisse avoir plus d'un composant sur la première ligne. Y at-il d'autres dispositions que je peux utiliser ou est-il une certaine façon, je peux manipuler BorderLayout pour que je puisse mettre 6 composants sur la première ligne?

Répondre

2

Ce que vous devez faire est de composants imbriquer des autres composants. Par exemple, le sommet (du Nord) devrait être l'un JPanel. Que JPanel contiendra les 6 composants sur le dessus.

Le code peut ressembler à ce qui suit:

JPanel northPane = new JPanel(); 
northPane.add(new JLabel("Principle: ")); 
northPane.add(principleTextBox); 
... and so on 
mainPanel.setLayout(new BorderLayout()); 
mainPanel.add(northPanel, BorderLayout.NORTH); 

Le composant Centre sera probablement une autre JPanel contenant les deux boutons centraux. Et la composante du Sud sera une autre JPanel contenant le seul JLabel ou simplement le JLabel.

Si vous n'avez pas besoin d'utiliser un BorderLayout pour le panneau principal, il peut être plus facile d'utiliser un BoxLayout.

1

Si je recréaient que l'interface utilisateur, je voudrais commencer par un JPanel en utilisant un GridLayout avec 3 lignes et 1 colonne. Dans chaque colonne j'ajouterais un enfant JPanel.

Ensuite, pour chaque ligne, j'utiliserais un GridBagLayout pour positionner les composants.

1

Here est un tutoriel sur les gestionnaires de disposition. N'oubliez pas que vous pouvez toujours ajouter plusieurs éléments à un JPanel et appliquer une mise en page spécifique à ce JPanel. Ensuite, vous pouvez imbriquer des panneaux (ajouter des panneaux à l'intérieur d'autres panneaux).

2

Une fois de plus je me tourne vers miglayout, le meilleur gestionnaire de disposition absolu pour Java. Pas de JPanels imbriqués, juste une mise en page simple utilisant des contraintes basées sur des chaînes.

alt text

Avec le mode de débogage sur: alt text

Après le redimensionnement de la fenêtre (notez le rapport de la taille des champs de texte reste le même) alt text

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import net.miginfocom.swing.MigLayout; 

/** 
* 
* @author nicholasdunn 
*/ 
public class InterestCalculator extends JPanel { 

    public InterestCalculator() { 
     super(new MigLayout("debug, fill", "align center")); 
     // Make 6 components cram into one cell 
     add(new JLabel("Principal:"), "split 6"); 
     // This textfield grows at twice the normal rate 
     add(new JTextField(), "growx 200"); 
     add(new JLabel("Interest rate (percentage):")); 
     // This one at a normal rate 
     add(new JTextField(), "growx 100"); 
     add(new JLabel("Years:")); 
     // This one at half the normal rate 
     add(new JTextField(), "growx 50, wrap"); 

     // The row with the two buttons 
     add(new JButton("Compute simple interest"), "split 2"); 
     add(new JButton("Compute compound interest"), "wrap"); 

     // The result label 
     add(new JLabel("The result with simple interest would be")); 
    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(""); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new InterestCalculator(); 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
+1

Et juste pour être Si vous faisiez cela pour de vrai, vous auriez besoin de sauvegarder des références aux TextFields pour pouvoir capturer leurs valeurs et calculer les formules. – I82Much

Questions connexes