一个简单的GUI乘法表

时间:2014-03-03 22:48:40

标签: java user-interface

我应该使用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();
    }
}

1 个答案:

答案 0 :(得分: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); 
    }
}