停止按钮不会运行“总计”

时间:2016-05-05 02:43:15

标签: java

当用户点击开始时,尝试获取停止按钮以提供总数。停止按钮不会给我一个总数或保持点击它时开始给出的数字。

我在这里做错了什么?

$e = 'From : name <'.$_POST['contact-email'].'>';

2 个答案:

答案 0 :(得分:0)

每次单击停止按钮时,都会重新创建totalpoints变量并将其设置为零。将此变量移到动作侦听器之外,您就不会遇到此问题。

答案 1 :(得分:0)

这是范围可变的问题。通过简单地将变量移动到具有更明显范围的位置,可以通过更多方法(简单地放置)来访问它们

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Fishing {

public static void main(String[] args) {
    // This is where the variables got moved to
    final int[] total2 = {
            0
    };
    final int[] totalpoints = {
            0
    };

    //create Jframe
    JFrame Frame = new JFrame("Fishing Game");
    Frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    JPanel panel = new JPanel(new BorderLayout());
    panel.setPreferredSize(new Dimension(600, 600));

    //two panels in main panel
    JPanel panelup = new JPanel();
    JPanel paneldown = new JPanel();
    panelup.setBackground(Color.white);

    //title image with word overlay
    ImageIcon pole1 = new ImageIcon("fishingpole.png");
    JLabel title = new JLabel(pole1);
    title.setBounds(150, 0, 325, 175);
    title.setText("Go Fishing?");
    title.setFont(new Font("Ravie", Font.BOLD, 30));
    title.setForeground(Color.green);
    title.setHorizontalTextPosition(JLabel.CENTER);
    title.setVerticalTextPosition(JLabel.CENTER);
    title.setOpaque(false);
    panelup.add(title);

    panelup.setPreferredSize(new Dimension(600, 375));
    panelup.setLayout(null);


    JLabel points = new JLabel("<html>Look what you caught!<br>(click start to keep going)</html> ");
    points.setForeground(Color.blue);
    points.setFont(new Font(null, Font.BOLD, 20));
    points.setBounds(10, 150, 450, 100);
    panelup.add(points);

    JTextField caught = new JTextField(20);
    caught.setSize(10, 10);
    caught.setFont(new Font("Times New Roman", Font.BOLD, 15));
    caught.setForeground(Color.RED);
    caught.setBounds(10, 230, 350, 30);
    panelup.add(caught);

    JTextField total = new JTextField(20);
    total.setSize(10, 10);
    total.setFont(new Font("Times New Roman", Font.BOLD, 15));
    total.setForeground(Color.RED);
    total.setBounds(325, 315, 150, 30);
    panelup.add(total);

    // STOP BUTTON
    JLabel End = new JLabel("<html>All Done?! Press Stop and Let's<br>see how well you did!<html>");
    End.setForeground(Color.blue);
    End.setFont(new Font(null, Font.BOLD, 20));
    End.setBounds(10, 310, 325, 50);
    panelup.add(End);

    JTextField single = new JTextField(20);
    single.setSize(10, 10);
    single.setFont(new Font("Times New Roman", Font.BOLD, 15));
    single.setForeground(Color.RED);
    single.setBounds(10, 275, 100, 30);
    panelup.add(single);


    //Label for asking user to continue
    ImageIcon bobber = new ImageIcon("bobber2.jpg");
    JButton start = new JButton(bobber);
    start.setBorderPainted(false);
    start.setBounds(350, 170, 100, 100);
    start.setText("Start!");
    start.setFont(new Font("Serif", Font.BOLD, 20));
    start.setForeground(Color.black);
    start.setHorizontalTextPosition(JLabel.CENTER);
    start.setVerticalTextPosition(JLabel.CENTER);
    start.setOpaque(false);
    panelup.add(start);

    ImageIcon bobber2 = new ImageIcon("bobber2.jpg");
    JButton stop = new JButton(bobber2);
    stop.setBorderPainted(false);
    stop.setBounds(450, 170, 100, 100);
    stop.setText("Stop!");
    stop.setFont(new Font("Serif", Font.BOLD, 25));
    stop.setForeground(Color.black);
    stop.setHorizontalTextPosition(JLabel.CENTER);
    stop.setVerticalTextPosition(JLabel.CENTER);
    stop.setOpaque(false);
    panelup.add(stop);


    start.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            double input = 0;
            int count = 0;
            int points2 = 0;
            int die;
            die = (int) (Math.random() * 6) + 1;

            if (die == 1) {
                caught.setText("Winner winner fish fry dinner! Catfish ");
                points2 = 10;

            }
            if (die == 2) {
                caught.setText("Nemo! Go straight to Jail. ");
                points2 = 15;
            }

            if (die == 3) {
                caught.setText("Stinky shoe boohoo! ");
                points2 = 5;
            }
            if (die == 4) {
                caught.setText("Whale of a fish, BIG TUNA ");
                points2 = 30;

            }
            if (die == 5) {
                caught.setText("Yumm Yumm Bass Pro");
                points2 = 25;
            }
            if (die == 6) {
                caught.setText("Is that a toilet bowl seat!? ");
                points2 = 10;
            }

            count += points2;

            single.setText(points2 + "");
            totalpoints[0] += points2;
        }
    });

    stop.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                total2[0] = Integer.parseInt(single.getText());
            } catch (NumberFormatException ee) {
                // If there is a blank input from single.getText();, then make total2 zero to avoid larger errors
                total2[0] = 0; // Another way to handle the exception
            }
            total.setText("" + totalpoints[0]);
        }

    });


    //paneldown image
    ImageIcon water = new ImageIcon("water.jpg");
    JLabel pic = new JLabel(water);
    paneldown.add(pic, BorderLayout.SOUTH);

    //panel positioning
    panel.add(panelup, BorderLayout.NORTH);
    panel.add(paneldown, BorderLayout.SOUTH);


    //set frame with panel
    Frame.add(panel);
    Frame.pack();
    Frame.setLocationRelativeTo(null);
    Frame.setSize(600, 600);
    Frame.setVisible(true);
}
}

我将变量转换为数组的原因是因为变量是从内部类访问的,它们需要被声明为final或者是final。阅读此帖(here)

的更多信息

顺便说一下,(恕我直言)你的初始代码被格式化了。如果您要发布大量代码,请注意除了您之外的其他人必须阅读它,因为即使我的IDE自动格式化程序也无法解决此问题。

编辑:更新了代码以包含额外的语句以添加功能。 编辑2:更新代码以更好的方式处理异常