Изменение JLabels между классами - PullRequest
0 голосов
/ 04 ноября 2011

Мой первый пост, так что простите за неправильный этикет.В настоящее время я делаю свой проект на конец года для школы, и мне нужно немного помочь.Я делаю Java-приложение с графическим интерфейсом в Netbeans.У меня есть два класса.Один - это класс, управляющий таймером, другой - класс, представляющий собой экран табло.Мне нужно обновить табло timerLabel со временем, которое отсчитывается в timerClass.Это довольно грязно, поскольку в классе Timer есть еще одна метка таймера , которая обновляет .Моя проблема в том, что я не могу получить timerLabel в MatchScreen () для обновления.Вот мой код:

Класс таймера

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

public class TimerClass extends JFrame {

    Timer timer;
    JLabel promptLabel, timerLabel;
    int counter;
    JTextField tf;
    JButton button;
    MatchScreen call = null;

    public TimerClass() {
        call = new MatchScreen();
        setLayout(new GridLayout(4, 4, 7, 7));
        promptLabel = new JLabel(""
                + "Enter number of seconds for the timer", 
                SwingConstants.CENTER);
        add(promptLabel);
        tf = new JTextField(5);
        add(tf);
        button = new JButton("Start");
        add(button);
        timerLabel = new JLabel("waiting...", 
                SwingConstants.CENTER);
        add(timerLabel);

        event e = new event();
        button.addActionListener(e);
        System.out.println("Button pressed");
    }

    public class event implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            System.out.println("Action performed");
            int count = (int) (Double.parseDouble(tf.getText()));
            timerLabel.setText("Time left: " + count);
            call.setTimerLabel(count);
            System.out.println("Passed count to tc");
            TimeClass tc = new TimeClass(count);
            timer = new Timer(1000, tc);
            System.out.println("Timer.start");
            timer.start();
            //throw new UnsupportedOperationException("Not supported yet.");
        }

        /*public void actionPerformed(ActionEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
        }*/
    }

    public class TimeClass implements ActionListener {

        int counter;

        public TimeClass(int counter) {
            this.counter = counter;
        }

        public void actionPerformed(ActionEvent e) {
            counter--;
            if (counter >= 1) {
                call.setTimerLabel(counter);
            } else {
                timerLabel.setText("END");
                timer.stop();
                Toolkit.getDefaultToolkit().beep();
            }
        }
    }

    public static void main(String args[]) {
        TimerClass gui = new TimerClass();
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.setSize(250, 150);
        gui.setTitle("Time Setup");
        gui.setVisible(true);
    }
}

А теперь экран ScoreBoard

public class MatchScreen extends javax.swing.JFrame {

    int redScore = 0, blueScore = 0, blueCat1 = 0,
            blueCat2 = 0, redCat1 = 0, redCat2 = 0, winner = 0;

    public MatchScreen() {
        initComponents();
    }

    //Determine Winner of the match
    public int getWinner() {
        if (redScore > blueScore) {
            winner = 1;
        } else {
            winner = 2;
        }
        return winner;
    }

    public void setTimerLabel(int a) {
        int time = a;
        while (time >= 1) {
            timerLabel.setText("" + time);
        }
        if (time < 1) {
            timerLabel.setText("End");
        }
    }

    private void jButton13ActionPerformed(java.awt.event.ActionEvent evt) {
        //Creates an object of the timerClass
        TimerClass gui = new TimerClass();
        gui.setSize(300, 175);
        gui.setTitle("Time Setup");
        gui.setVisible(true);
    }
}

Какой-то код, который я считал неуместным, был исключен из MatchScreen ().

Большое спасибо

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

удалось решить общую проблему.Я положил весь код в один класс.Не идеально, но это работает: / В любом случае, приближаются сроки.

Искреннее спасибо.

0 голосов
/ 05 ноября 2011

У вас есть цикл while в методе setTimerLabel, который, я не думаю, вы намеревались поместить туда. Кроме того, вы берете параметр a и присваиваете ему time, а затем никогда больше не используете a, почему бы просто не переименовать ваш параметр в time и обойти эту дополнительную переменную?

EDIT

Извините, я забыл объяснить, что я вижу: P Если вы скажете call.setTimerLabel(10), то вы нажмете на цикл while (while(time >= 1), который по сути работает while(10 >= 1), который представляет собой бесконечный цикл. Ваша программа никогда не покидает метод setTimerLabel при первом вызове с помощью value >= 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...