Java - 如何使用计数器数据进行分析?

时间:2015-07-16 04:56:52

标签: java jframe counter

我有一个带有三个标签的JFrame:Home,Statistics和About。

在“主页”选项卡上,我有一个计数器,用于跟踪您单击左箭头或右箭头的次数,并更新计数器(我使用KeyListener方法):

enter image description here

在Statistics选项卡上,我想以某种方式导入我从计数器生成的这些Left和Right值。

enter image description here

但是,我不知道该怎么做。有人可以帮助我吗?

编辑: 以下是“主页”选项卡(左/右计数器)的代码

import java.awt.*;
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class HomePanel extends JPanel implements KeyListener {

    // Variables
    private int counter = 0;
    private int counter2 = 0;
    private JLabel counterLabel;
    private JLabel counterLabel2;
    private JButton countUpButton;
    private JButton countDownButton;

    // Panel Elements
    public HomePanel() {

        countUpButton = new JButton ("Left");
        countUpButton.setBounds(195, 121, 75, 29);
        countUpButton.addKeyListener(this);

        countDownButton = new JButton ("Right");
        countDownButton.setBounds(195, 162, 77, 29);
        countDownButton.addKeyListener(this);

        counterLabel = new JLabel("" + counter);
        counterLabel.setBounds(282, 126, 34, 16);
        counterLabel2 = new JLabel("" + counter2);
        counterLabel2.setBounds(282, 167, 34, 16);
        setLayout(null);

        add (countUpButton);
        add (counterLabel);
        add (countDownButton);
        add (counterLabel2);
    }

    // Key Listener
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub

    }

    // Ensures counter updates once per stroke
    @Override
    public void keyPressed(KeyEvent e) {
        // TODO Auto-generated method stub
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            counter++;
            counterLabel.setText("" + counter);
        } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            counter2++;
            counterLabel2.setText("" + counter2);
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub

    }
}

以下是Statistics选项卡的代码:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;


public class StatsPanel extends JPanel {

    private JTextField textField;
    private JTextField textField_1;
    private JTextField textField_2;
    private JTextField textField_3;
    private JTextField textField_4;
    private JTextField textField_5;
    private JTextField textField_6;
    public StatsPanel() {
        setLayout(null);

        JPanel panel = new JPanel();
        panel.setBounds(41, 43, 371, 234);
        add(panel);
        panel.setLayout(null);

        JLabel lblNewLabel = new JLabel("LEFT:");
        lblNewLabel.setBounds(115, 39, 33, 16);
        panel.add(lblNewLabel);

        JLabel lblRight = new JLabel("RIGHT:");
        lblRight.setBounds(105, 67, 43, 16);
        panel.add(lblRight);

        JLabel lblNewLabel_2 = new JLabel("TOTAL:");
        lblNewLabel_2.setBounds(102, 95, 46, 16);
        panel.add(lblNewLabel_2);

        JLabel lblNewLabel_3 = new JLabel("% LEFT:");
        lblNewLabel_3.setBounds(102, 123, 46, 16);
        panel.add(lblNewLabel_3);

        JLabel lblNewLabel_4 = new JLabel("% RIGHT: ");
        lblNewLabel_4.setBounds(91, 151, 60, 16);
        panel.add(lblNewLabel_4);

        textField_2 = new JTextField();
        textField_2.setBounds(160, 33, 134, 28);
        panel.add(textField_2);
        textField_2.setColumns(10);

        textField_3 = new JTextField();
        textField_3.setBounds(160, 61, 134, 28);
        panel.add(textField_3);
        textField_3.setColumns(10);

        textField_4 = new JTextField();
        textField_4.setBounds(160, 89, 134, 28);
        panel.add(textField_4);
        textField_4.setColumns(10);

        textField_5 = new JTextField();
        textField_5.setBounds(160, 117, 134, 28);
        panel.add(textField_5);
        textField_5.setColumns(10);

        textField_6 = new JTextField();
        textField_6.setBounds(160, 145, 134, 28);
        panel.add(textField_6);
        textField_6.setColumns(10);

        JButton btnCalculate = new JButton("Calculate");
        btnCalculate.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

                // Variables
                double num1, num2, ans, percEq1, percEq2, percLeft, percRight;

                try {

                    num1 = Double.parseDouble(textField_2.getText());
                    num2 = Double.parseDouble(textField_3.getText());

                    ans = num1 + num2;
                    textField_4.setText(Double.toString(ans));

                    percEq1 = (num1/(num1+num2))*100;
                    percLeft = Math.round(percEq1);
                    textField_5.setText(Double.toString(percLeft));

                    percEq2 = (num2/(num1+num2))*100;
                    percRight = Math.round(percEq2);
                    textField_6.setText(Double.toString(percRight));

                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, "Please enter a valid number!");
                }

            }
        });
        btnCalculate.setBounds(79, 185, 117, 29);
        panel.add(btnCalculate);

        JButton btnRest = new JButton("Reset");
        btnRest.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                textField_2.setText("");
                textField_3.setText("");
                textField_4.setText("");
                textField_5.setText("");
                textField_6.setText("");
            }
        });


        btnRest.setBounds(197, 185, 117, 29);
        panel.add(btnRest);
    }
}

1 个答案:

答案 0 :(得分:0)

我建议在父容器中使用变量,以便每个选项卡都可以访问它们,或者从统计信息选项卡中,将值提交给父框架,并且父级要求返回主页面选项卡。 这不是一个简短的代码,你没有附加你的代码,所以我希望你能得到这个想法。

在主容器中你有这样的东西:

KeyPressStats statistics = new KeyPressStats();
HomePanel home = new HomePanel(statistics);
StatsPanel stats = new StatsPanel(statistics);
JTabbedPane tabbed = new JTabbedPane();
tabbed.addTab("Home", home);
tabbed.addTab("Stats", stats);
tabbed.setVisible(true);

KeyPressStats如下:

public class KeyPressStats {
  private int leftCount = 0;
  private int rightCount = 0;

  public int getLeftCount() {
    return leftCount;
  }

  public void setLeftCount(int leftCount) {
    this.leftCount = leftCount;
  }

  public int getRightCount() {
    return rightCount;
  }

  public void setRightCount(int rightCount) {
    this.rightCount = rightCount;
  }

  public void incrementRight() {
    rightCount++;
  }

  public void incrementLeft() {
    leftCount++;
  }

}

Home和stats选项卡中的代码将进行以下更改:

public class HomePanel extends JPanel implements KeyListener {
  ...
  private KeyPressStats stats;

  public HomePanel(KeyPressStats stats) {
    this.stats = stats;
    countUpButton = new JButton("Left");
    countUpButton.setBounds(195, 121, 75, 29);
    ...
  }

  @Override
  public void keyPressed(KeyEvent e) {    
    if (e.getKeyCode() == KeyEvent.VK_LEFT) {
      stats.incrementLeft();
      counterLabel.setText("" + stats.getLeftCount());
    } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
      stats.incrementRight();
      counterLabel2.setText("" + stats.getRightCount());
    }
  }


public class StatsPanel extends JPanel {
...
  public StatsPanel(KeyPressStats stats) {
    ...
    textField_2 = new JTextField(""+stats.getLeftCount());
    textField_2.setBounds(160, 33, 134, 28);
    ...
    textField_3 = new JTextField(""+stats.getRightCount());
    textField_3.setBounds(160, 61, 134, 28);
    ...
  }
}