2011-05-02 68 views
0

我正在創建一個簡單的計算器GUI,並且我一直在使用netbeans IDE GUI構建器。我一直在試圖理解GroupLayout的代碼,不幸的是我不明白。我想也許通過更改爲GridBagLayout它會更清晰,我會更好地理解代碼。將GroupLayout更改爲GridBagLayout

以下是我的代碼。任何人都可以幫助將其更改爲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"); 

    equalsButton.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 

} 
+1

@Wassma:「我想也許通過更改爲'GridBagLayout'將會更清楚」?!?是什麼讓你認爲改用GBL就能達到這個目標?這似乎與我在GBL方面的所有經驗相反。即使提倡GBL的人們通常使用助手方法來定義組件的佈局約束。 – 2011-05-02 05:30:34

+0

你推薦哪個佈局管理器 – 2011-05-02 05:49:38

+0

查看我對嵌套佈局** s **的評論(重點是** s **)。 – 2011-05-02 05:57:19

回答

1

看看這裏:Calculator in java swing。它在面板中使用GridLayout並可能對您有所幫助。

+1

+1該代碼還演示了嵌套佈局的概念(GridLayouts位於「BorderLayout」內)。這裏是另一個[嵌套佈局的演示](http://stackoverflow.com/questions/5621338/about-swing-and-jtable/5630271#5630271)。 – 2011-05-02 05:22:16

0

這裏是一個片段,做的事情基本佈局GroupLayout相同,但只有10行代碼:

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); 

它使用DesignGridLayout使佈局便於代碼和維護。 基於GroupLayout的樣本唯一的視覺差異是,當您放大框架時,所有按鈕都會變大(根據自己的口味,這並不一定是壞的)。

請注意,我花了大約5-10分鐘來寫上面的10行。

編輯:添加了2個額外的代碼行,在底部添加徽標。

+1

我只看到我忘了標識(我在原始面板中看不到它,因爲我沒有它的圖像文件)。不知道它應該放在哪裏(最後一行,但它居中?) – jfpoilpret 2011-05-02 08:52:14

+1

@Wassma:爲了創建一個涉及圖像的[SSCCE](http://pscode.org/sscce.html),我建議要麼熱 - 鏈接到互聯網上可用的圖像(例如[媒體頁面](http://pscode.org/media/#image)中的任何圖像),或者在源中生成圖像,如[第二個例子](http://stackoverflow.com/questions/5853879/java-swing-obtain-image-of-jframe/5853992#5853992)(紅色/橙色漸變)。當然,這個問題也可以使用繪圖或ASCII藝術來描述。 – 2011-05-02 09:21:09