开发者

Changing GroupLayout to GridBagLayout

Am creating a simple calculator GUI and I have been using netbeans IDE GUI builder. I have been trying to make sense of the GroupLayout code and unfortunately I just don't get it. I thought maybe by changing to GridBagLayout it would be more clear and I would be in a better position to understand the code.

Below is my code. Can anyone help change it to GridBagLayout?

public class CITCalculatorGUI extends javax.swing.JFrame {

/* Creates new frame CITCalculatorGUI */
public CITCalculatorGUI() {
    initComponents();
}

/* This method is called from within the constructor to
 * initialize the frame. 
 */

private void initComponents() {

    tempTextField = new javax.swing.JTextField();
    sevenButton = new javax.swing.JButton();
    eightButton = new javax.swing.JButton();
    nineButton = new javax.swing.JButton();
    fourButton = new javax.swing.JButton();
    fiveButton = new javax.swing.JButton();
    sixButton = new javax.swing.JButton();
    oneButton = new javax.swing.JButton();
    twoButton = new javax.swing.JButton();
    threeButton = new javax.swing.JButton();
    zeroButton = new javax.swing.JButton();
    positiveNegativeToggle = new javax.swing.JButton();
    decimalPoint = new javax.swing.JButton();
    base16A = new javax.swing.JButton();
    base16B = new javax.swing.JButton();
    base16C = new javax.swing.JButton();
    base16D = new javax.swing.JButton();
    base16E = new javax.swing.JButton();
    base16F = new javax.swing.JButton();
    plusButton = new javax.swing.JButton();
    minusButton = new javax.swing.JButton();
    divisionButton = new javax.swing.JButton();
    multiplication = new javax.swing.JButton();
    andButton = new javax.swing.JButton();
    orButton = new javax.swing.JButton();
    xorButton = new javax.swing.JButton();
    norButton = new javax.swing.JButton();
    equalsButton = new javax.swing.JButton();
    nandButton = new javax.swing.JButton();
    makLogo = new javax.swing.JLabel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("CIT Calculator");

    sevenButton.setBackground(new java.awt.Color(0, 0, 255));
    sevenButton.setForeground(new java.awt.Color(153, 153, 153));
    sevenButton.setText("7");

    eightButton.setBackground(new java.awt.Color(0, 0, 255));
    eightButton.setForeground(new java.awt.Color(153, 153, 153));
    eightButton.setText("8");

    nineButton.setBackground(new java.awt.Color(0, 0, 255));
    nineButton.setForeground(new java.awt.Color(153, 153, 153));
    nineButton.setText("9");

    fourButton.setBackground(new java.awt.Color(0, 0, 255));
    fourButton.setForeground(new java.awt.Color(153, 153, 153));
    fourButton.setText("4");

    fiveButton.setBackground(new java.awt.Color(0, 0, 255));
    fiveButton.setForeground(new java.awt.Color(153, 153, 153));
    fiveButton.setText("5");

    sixButton.setBackground(new java.awt.Color(0, 0, 255));
    sixButton.setForeground(new java.awt.Color(153, 153, 153));
    sixButton.setText("6");

    oneButton.setBackground(new java.awt.Color(0, 0, 255));
    oneButton.setForeground(new java.awt.Color(153, 153, 153));
    oneButton.setText("1");

    twoButton.setBackground(new java.awt.Color(0, 0, 255));
    twoButton.setForeground(new java.awt.Color(153, 153, 153));
    twoButton.setText("2");

    threeButton.setBackground(new java.awt.Color(0, 0, 255));
    threeButton.setForeground(new java.awt.Color(153, 153, 153));
    threeButton.setText("3");

    zeroButton.setBackground(new java.awt.Color(0, 0, 255));
    zeroButton.setForeground(new java.awt.Color(153, 153, 153));
    zeroButton.setText("0");

    positiveNegativeToggle.setBackground(new java.awt.Color(0, 0, 255));
    positiveNegativeToggle.setForeground(new java.awt.Color(153, 153, 153));
    positiveNegativeToggle.setText("+/-");

    decimalPoint.setBackground(new java.awt.Color(0, 0, 255));
    decimalPoint.setForeground(new java.awt.Color(153, 153, 153));
    decimalPoint.setText(".");

    base16A.setBackground(new java.awt.Color(0, 0, 255));
    base16A.setForeground(new java.awt.Color(153, 153, 153));
    base16A.setText("A");

    base16B.setBackground(new java.awt.Color(0, 0, 255));
    base16B.setForeground(new java.awt.Color(153, 153, 153));
    base16B.setText("B");

    base16C.setBackground(new java.awt.Color(0, 0, 255));
    base16C.setForeground(new java.awt.Color(153, 153, 153));
    base16C.setText("C");

    base16D.setBackground(new java.awt.Color(0, 0, 255));
    base16D.setForeground(new java.awt.Color(153, 153, 153));
    base16D.setText("D");

    base16E.setBackground(new java.awt.Color(0, 0, 255));
    base16E.setForeground(new java.awt.Color(153, 153, 153));
    base16E.setText("E");

    base16F.setBackground(new java.awt.Color(0, 0, 255));
    base16F.setForeground(new java.awt.Color(153, 153, 153));
    base16F.setText("F");

    plusButton.setBackground(new java.awt.Color(51, 255, 0));
    plusButton.setForeground(new java.awt.Color(153, 153, 153));
    plusButton.setText("+");

    minusButton.setBackground(new java.awt.Color(51, 255, 0));
    minusButton.setForeground(new java.awt.Color(153, 153, 153));
    minusButton.setText("-");

    divisionButton.setBackground(new java.awt.Color(51, 255, 0));
    divisionButton.setForeground(new java.awt.Color(153, 153, 153));
    divisionButton.setText("/");

    multiplication.setBackground(new java.awt.Color(51, 255, 0));
    multiplication.setForeground(new java.awt.Color(153, 153, 153));
    multiplication.setText("*");

    andButton.setBackground(new java.awt.Color(51, 255, 0));
    andButton.setForeground(new java.awt.Color(153, 153, 153));
    andButton.setText("AND");

    orButton.setBackground(new java.awt.Color(51, 255, 0));
    orButton.setForeground(new java.awt.Color(153, 153, 153));
    orButton.setText("OR");

    xorButton.setBackground(new java.awt.Color(51, 255, 0));
    xorButton.setForeground(new java.awt.Color(153, 153, 153));
    xorButton.setText("XOR");

    norButton.setBackground(new java.awt.Color(51, 255, 0));
    norButton.setForeground(new java.awt.Color(153, 153, 153));
    norButton.setText("NOR");

    equalsButto开发者_运维百科n.setBackground(new java.awt.Color(51, 255, 0));
    equalsButton.setForeground(new java.awt.Color(153, 153, 153));
    equalsButton.setText("=");

    nandButton.setBackground(new java.awt.Color(51, 255, 0));
    nandButton.setForeground(new java.awt.Color(153, 153, 153));
    nandButton.setText("NAND");

    makLogo.setIcon(new javax.swing.ImageIcon("C:\\test\\mak-logo.jpg")); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);//sets the layout manager
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(tempTextField, javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                .addComponent(base16D, javax.swing.GroupLayout.Alignment.LEADING, 0, 0, Short.MAX_VALUE)
                                .addComponent(base16A, javax.swing.GroupLayout.Alignment.LEADING, 0, 0, Short.MAX_VALUE)
                                .addComponent(zeroButton, javax.swing.GroupLayout.Alignment.LEADING, 0, 0, Short.MAX_VALUE)
                                .addComponent(oneButton, javax.swing.GroupLayout.Alignment.LEADING, 0, 0, Short.MAX_VALUE)
                                .addComponent(fourButton, javax.swing.GroupLayout.Alignment.LEADING, 0, 0, Short.MAX_VALUE))
                            .addComponent(sevenButton, javax.swing.GroupLayout.DEFAULT_SIZE, 57, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(base16E, 0, 0, Short.MAX_VALUE)
                            .addComponent(base16B, 0, 0, Short.MAX_VALUE)
                            .addComponent(positiveNegativeToggle, 0, 0, Short.MAX_VALUE)
                            .addComponent(twoButton, 0, 0, Short.MAX_VALUE)
                            .addComponent(fiveButton, 0, 0, Short.MAX_VALUE)
                            .addComponent(eightButton, javax.swing.GroupLayout.DEFAULT_SIZE, 58, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(base16F, 0, 0, Short.MAX_VALUE)
                            .addComponent(base16C, 0, 0, Short.MAX_VALUE)
                            .addComponent(decimalPoint, 0, 0, Short.MAX_VALUE)
                            .addComponent(threeButton, 0, 0, Short.MAX_VALUE)
                            .addComponent(sixButton, 0, 0, Short.MAX_VALUE)
                            .addComponent(nineButton, javax.swing.GroupLayout.DEFAULT_SIZE, 58, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                        .addComponent(multiplication, 0, 0, Short.MAX_VALUE)
                                        .addComponent(xorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addComponent(plusButton, javax.swing.GroupLayout.DEFAULT_SIZE, 58, Short.MAX_VALUE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(norButton, 0, 0, Short.MAX_VALUE)
                                    .addComponent(andButton, 0, 0, Short.MAX_VALUE)
                                    .addComponent(minusButton, javax.swing.GroupLayout.DEFAULT_SIZE, 54, Short.MAX_VALUE)))
                            .addComponent(nandButton))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(equalsButton, 0, 0, Short.MAX_VALUE)
                            .addComponent(orButton, 0, 0, Short.MAX_VALUE)
                            .addComponent(divisionButton, javax.swing.GroupLayout.DEFAULT_SIZE, 57, Short.MAX_VALUE))))
                .addComponent(makLogo))
            .addContainerGap(23, Short.MAX_VALUE))
    );

    layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {base16A, base16B, base16C, base16D, base16E, base16F, decimalPoint, eightButton, fiveButton, fourButton, nineButton, oneButton, positiveNegativeToggle, sevenButton, sixButton, threeButton, twoButton, zeroButton});

    layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {andButton, divisionButton, equalsButton, minusButton, multiplication, nandButton, norButton, orButton, plusButton, xorButton});

    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(tempTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(eightButton)
                        .addComponent(sevenButton))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(fourButton)
                        .addComponent(fiveButton))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(oneButton)
                        .addComponent(twoButton))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(zeroButton)
                        .addComponent(positiveNegativeToggle))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(base16A)
                        .addComponent(base16B)))
                .addGroup(layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(nineButton)
                        .addComponent(minusButton)
                        .addComponent(divisionButton)
                        .addComponent(plusButton))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(sixButton)
                        .addComponent(multiplication)
                        .addComponent(andButton)
                        .addComponent(orButton))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(threeButton)
                        .addComponent(xorButton)
                        .addComponent(norButton)
                        .addComponent(equalsButton))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(decimalPoint)
                        .addComponent(nandButton))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(base16C)))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(base16D)
                .addComponent(base16E)
                .addComponent(base16F))
            .addGap(28, 28, 28)
            .addComponent(makLogo)
            .addContainerGap(28, Short.MAX_VALUE))
    );

    pack();//pack method ensures the frame is at its preferred size
}


public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new CITCalculatorGUI().setVisible(true);
        }
    });
}// this code ensures thread safety.

// Variables declaration
private javax.swing.JButton andButton;
private javax.swing.JButton base16A;
private javax.swing.JButton base16B;
private javax.swing.JButton base16C;
private javax.swing.JButton base16D;
private javax.swing.JButton base16E;
private javax.swing.JButton base16F;
private javax.swing.JButton decimalPoint;
private javax.swing.JButton divisionButton;
private javax.swing.JButton eightButton;
private javax.swing.JButton equalsButton;
private javax.swing.JButton fiveButton;
private javax.swing.JButton fourButton;
private javax.swing.JLabel makLogo;
private javax.swing.JButton minusButton;
private javax.swing.JButton multiplication;
private javax.swing.JButton nandButton;
private javax.swing.JButton nineButton;
private javax.swing.JButton norButton;
private javax.swing.JButton oneButton;
private javax.swing.JButton orButton;
private javax.swing.JButton plusButton;
private javax.swing.JButton positiveNegativeToggle;
private javax.swing.JButton sevenButton;
private javax.swing.JButton sixButton;
private javax.swing.JTextField tempTextField;
private javax.swing.JButton threeButton;
private javax.swing.JButton twoButton;
private javax.swing.JButton xorButton;
private javax.swing.JButton zeroButton;
// End of variables declaration

}


Take a look here: Calculator in java swing. It uses GridLayout in panel and might help you.


Here is a snippet that does almost the same layout as GroupLayout, but with only 10 lines of code:

DesignGridLayout layout = new DesignGridLayout(getContentPane());
layout.row().grid().add(tempTextField);
layout.row().grid().add(sevenButton, eightButton, nineButton).grid().add(plusButton, minusButton, divisionButton);
layout.row().grid().add(fourButton, fiveButton, sixButton).grid().add(multiplication, andButton, orButton);
layout.row().grid().add(oneButton, twoButton, threeButton).grid().add(xorButton, norButton, equalsButton);
layout.row().grid().add(zeroButton, positiveNegativeToggle, decimalPoint).grid().empty().add(nandButton).empty();
layout.row().grid(1).add(base16A, base16B, base16C);
layout.row().grid(1).add(base16D, base16E, base16F);
layout.emptyRow();
layout.row().left().add(makLogo);

It uses DesignGridLayout to make the layout easy to code and maintain. The only visual difference with your GroupLayout-based sample is that when you enlarge the frame, all buttons get larger (which is not necessarily bad according to my own taste).

Note that it has taken me about 5-10 minutes to write the 10 lines above.

Edit: added 2 additional lines of code to add the logo at the bottom.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜