2017-06-28 5 views
1

Que dois-je changer dans mon code alors quand je maximise la fenêtre, alors les boutons vont se dilater proportionnellement?Redimensionner JPanel qui obtient GridBagLayout qui utilise GridBagConstraints quand agrandir l'écran

Lorsque je lance le programme, il commence avec la taille de mon choix mais je veux utiliser le maximum ... Merci.

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Insets; 

import javax.swing.JTextField; 
import javax.swing.JFrame; 
import javax.swing.JButton; 
import javax.swing.JPanel; 
import javax.swing.BorderFactory; 
import javax.swing.WindowConstants; 

public class Calculator extends JFrame 
{ 

    protected JTextField display; 

    protected JButton b1 = new JButton("1"); 
    protected JButton b2 = new JButton("2"); 
    protected JButton b3 = new JButton("3"); 
    protected JButton b4 = new JButton("4"); 
    protected JButton b5 = new JButton("5"); 
    protected JButton b6 = new JButton("6"); 
    protected JButton b7 = new JButton("7"); 
    protected JButton b8 = new JButton("8"); 
    protected JButton b9 = new JButton("9"); 
    protected JButton b0 = new JButton("0"); 

    protected JButton addition = new JButton("+"); 
    protected JButton subtraction = new JButton("-"); 
    protected JButton multiplication = new JButton("*"); 
    protected JButton division = new JButton("/"); 
    protected JButton result = new JButton("="); 
    protected JButton allClear = new JButton("C"); 
    protected JButton decimalPoint = new JButton("."); 

    public Calculator() 
    { 
     super("Calculator"); 
     Handler handler = new Handler(); 

     allClear.addActionListener(handler); 
     addition.addActionListener(handler); 
     subtraction.addActionListener(handler); 
     multiplication.addActionListener(handler); 
     division.addActionListener(handler); 
     result.addActionListener(handler); 
     decimalPoint.addActionListener(handler); 

     b0.addActionListener(handler); 
     b1.addActionListener(handler); 
     b2.addActionListener(handler); 
     b3.addActionListener(handler); 
     b4.addActionListener(handler); 
     b5.addActionListener(handler); 
     b6.addActionListener(handler); 
     b7.addActionListener(handler); 
     b8.addActionListener(handler); 
     b9.addActionListener(handler); 

     addition.setToolTipText("Addition"); 
     subtraction.setToolTipText("Subtraction"); 
     multiplication.setToolTipText("Multiplication"); 
     division.setToolTipText("Division"); 
     result.setToolTipText("Result"); 
     allClear.setToolTipText("All Clear"); 
     decimalPoint.setToolTipText("Decimal point"); 

     display = new JTextField(10); 
     display.setBorder(BorderFactory.createLineBorder(Color.CYAN)); 

     // Set a panel's layout manager using the JPanel constructor 

     JPanel mainPanel = new JPanel(new GridBagLayout()); 

     GridBagConstraints c = new GridBagConstraints(); 
     c.gridy = 0; 
     c.gridwidth = 3; 
     c.fill = GridBagConstraints.HORIZONTAL; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(display, c); 

     c = new GridBagConstraints(); 
     c.gridy = 0; 
     c.gridwidth = 1; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(allClear, c); 

     c = new GridBagConstraints(); 
     c.gridy = 1; 
     c.gridwidth = 1; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(b1, c); 

     c = new GridBagConstraints(); 
     c.gridy = 1; 
     c.gridwidth = 1; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(b2, c); 

     c = new GridBagConstraints(); 
     c.gridy = 1; 
     c.gridwidth = 1; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(b3, c); 

     c = new GridBagConstraints(); 
     c.gridy = 1; 
     c.gridwidth = 1; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(division, c); 

     c = new GridBagConstraints(); 
     c.gridy = 2; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(b4, c); 

     c = new GridBagConstraints(); 
     c.gridy = 2; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(b5, c); 

     c = new GridBagConstraints(); 
     c.gridy = 2; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(b6, c); 

     c = new GridBagConstraints(); 
     c.gridy = 2; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(multiplication, c); 

     c = new GridBagConstraints(); 
     c.gridy = 3; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(b7, c); 

     c = new GridBagConstraints(); 
     c.gridy = 3; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(b8, c); 

     c = new GridBagConstraints(); 
     c.gridy = 3; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(b9, c); 

     c = new GridBagConstraints(); 
     c.gridy = 3; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(subtraction, c); 

     c = new GridBagConstraints(); 
     c.gridy = 4; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(b0, c); 

     c = new GridBagConstraints(); 
     c.gridy = 4; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(decimalPoint, c); 

     c = new GridBagConstraints(); 
     c.gridy = 4; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(result, c); 

     c = new GridBagConstraints(); 
     c.gridy = 4; 
     c.insets = new Insets(5, 5, 5, 5); 
     mainPanel.add(addition, c); 

     add(mainPanel); 
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     pack(); 
    } 

Répondre

1

Vous devez définir weightx et weighty des contraintes. La relation entre ces valeurs contrôle comment l'espace «inutilisé» est distribué le long des cellules. Voir le GridBagConstraints documentation.

Vous pouvez définir la contrainte weightx et weighty sur 1.0 ou toute autre valeur strictement positive.

Le champ fill doit être défini sur BOTH de sorte que chaque bouton occupe sa cellule entière.

exemple Mini, réduite pour une meilleure lisibilité:

public class MiniCalculator extends JFrame { 

    public static void main(String[] args) { 
     new MiniCalculator().setVisible(true); 
    } 

    private JTextField display = new JTextField(10); 

    private JButton clear = new JButton("C"); 
    private JButton b1 = new JButton("1"); 
    private JButton b2 = new JButton("2"); 
    private JButton b3 = new JButton("3"); 

    public MiniCalculator() { 
     setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
     setLayout(new GridBagLayout()); 

     GridBagConstraints constraint = new GridBagConstraints(); 
     constraint.insets = new Insets(5, 5, 5, 5); 
     constraint.weighty = 1.0; 
     constraint.weightx = 1.0; 

     constraint.gridy = 0; 
     constraint.gridwidth = 2; 
     constraint.fill = GridBagConstraints.HORIZONTAL; 
     add(display, constraint); 

     constraint.gridwidth = 1; 
     constraint.fill = GridBagConstraints.BOTH; 
     add(clear, constraint); 

     constraint.gridy = 1; 
     add(b1, constraint); 
     add(b2, constraint); 
     add(b3, constraint); 

     pack(); 
     setLocationRelativeTo(null); 
    } 
} 

Note: il n'y a pas besoin de créer tout ce que les contraintes, il suffit de créer un et changer entre l'ajout des composants. La contrainte est clonée lorsqu'un composant est ajouté.

0

Essayez de remplacer c.fill = GridBagConstraints.HORIZONTAL; par c.fill = GridBagConstraints.BOTH; pour afficher le champ de texte. Faire la même chose pour tous les composants (boutons)

+0

ne fonctionnera pas tant que 'weightx' et' weighty' sont 0 –