2014-03-03 28 views
0

我应该使用GUI创建一个简单的乘法表,并且在大多数情况下,它正在做它应该做的事情。但我只是无法弄清楚它的底部,如果你点击一个特定的按钮,文本会说出这两个数字相乘和答案。一个简单的GUI乘法表

无论我点击哪个按钮,它只会告诉我输入的数字并将它们相乘。这里是我的代码:

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JOptionPane; 

public class MultiplicationTable { 
    int clickedCount; 
    int rowCount; 
    int colCount; 

    JFrame frame; 
    JPanel buttonPanel, countPanel; 
    JLabel countLabel; 


    private void createAndShowGui(){ 

     rowCount = Integer.parseInt(JOptionPane 
       .showInputDialog("How many rows do you want your multiplication table to be? ")); 

     colCount = Integer 
       .parseInt(JOptionPane 
         .showInputDialog("How many columns do you want your multiplication table to be? ")); 



     frame = new JFrame ("Simple Multiplication Table"); 
     frame.setLayout(new BorderLayout()); 

     buttonPanel = new JPanel(); 

     buttonPanel.setLayout(new GridLayout(rowCount, colCount)); 


     countPanel = new JPanel();  
     countLabel = new JLabel("? x ? = ?"); 

     for(int rowCounter = 1; rowCounter <= rowCount; rowCounter++) 
      for(int colCounter = 1; colCounter <= colCount; colCounter++){ 

       final JButton j = new JButton(Integer.toString(rowCounter * colCounter)); 

       j.addActionListener(new ActionListener(){ 


        @Override 
        public void actionPerformed(ActionEvent event) { 
         for(int rc = 1; rc <= rowCount; rc++) 
          for(int cc = 1; cc <= colCount; cc++){ 
           countLabel.setText(rc + " x " + cc + " = " + String.valueOf(rc * cc)); 
          } 
        } 
       }); 

       buttonPanel.add(j); 
      } 

     frame.add(buttonPanel, BorderLayout.NORTH); 
     countPanel.add(countLabel); 
     frame.add(countPanel, BorderLayout.SOUTH); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args){ 
     MultiplicationTable c = new MultiplicationTable(); 
     c.createAndShowGui(); 
    } 
} 
+2

什么你真的希望看到申请呢? –

回答

2

您当前ActionListener没有上下文,它不知道使用了什么样的两个值生成你给该按钮的值。

你可以做的是创建一个ActionListener,它接受用于生成按钮文本的值,然后就可以相应地更新标签。例如...

public class MultiplerActionListener implements ActionListener { 
    private int[] values; 
    private JLabel label; 
    public MultiplerActionListener(JLabel label, int... valuesToMultiple) { 
     values = valuesToMultiple; 
     this.label = label; 
    } 

    @Override 
    public void actionPerformed(ActionEvent event) {   
     int answer = 1; 
     StringBuilder sb = new StringBuilder(64); 
     for (int value : values) { 
      if (sb.length() > 0) { 
       sb.append(" x "); 
      } 
      sb.append(value); 
      answer *= value; 
     } 
     sb.append(" = "); 
     sb.append(answer); 
     label.setText(sb.toString()); 
    } 
} 

,那么只需在需要时创建按钮

for(int rowCounter = 1; rowCounter <= rowCount; rowCounter++) { 
    for(int colCounter = 1; colCounter <= colCount; colCounter++){ 
     final JButton j = new JButton(Integer.toString(rowCounter * colCounter)); 
     j.addActionListener(new MultiplerActionListener(countLabel, rowCounter, colCounter)); 
     buttonPanel.add(j); 
    } 
}