私はカウントダウンタイマーを設計しており、ここで見つけました。これはうまく機能します...秒数を入力すると、自動的にカウントダウンされます。ラジオボタンの選択をリッスンして開始時間を設定するようにコードを変更します。「開始」ボタンをクリックすると、カウントダウンが開始されます。レイアウトはうまくいきましたが、以下のコードに ButtonListener を配置するのに問題があります。

私は入れ子になったクラスを使い始めたばかりなので、いくつかの概念は私にはちょっとあいまいです。以下は、私が正しく理解していれば、ボタンのクリックをキャプチャするクラスクActionEventの内側にあるカウントダウンです。ActionListenerカウントダウンは、ボタンのクリックに依存しており、独立して実行することはできません。Listenerまた、クラスで使用できるクラス内のすべての変数も使用できますEvent。
したがって、ラジオ ボタンにListenerとを追加したい場合、これらはをカプセル化し、以下のコードをカプセル化すると考えています。クラス宣言はどこに行くべきかをマークしましたが、閉じ括弧はマークしませんでした。それらがどのように機能しているかを理解するために、より詳細な分析を行う必要があります。それは物事を行う正しい方法ですか?それとももっと良い方法がありますか?radiobuttion で startTime 変数を public として宣言すると、他のネストされたクラスに続くはずですよね?EventListenerActionevent
このすべてを正しく理解していますか?または、いくつかの重要な点が欠けていますか。これは内部クラスを使用した最初のプロジェクトなので、お手柔らかにお願いします。:)
  public Test() {
    super("Countdown timer");
    final String startTime = "10"
    text = new JTextField(startTime, 18);
    start = new JButton("Start");
    pr = new JRadioButton("30");
    sr = new JRadioButton("15");
    lr = new JRadioButton("5");
        JPanel radioPanel = new JPanel(new GridLayout(0, 1));
        radioPanel.add(pr);
        radioPanel.add(sr);
              radioPanel.add(lr);
//new button action listener here {
     // new button action event here {   
    start.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent click) {
        final long current = System.currentTimeMillis();
        try {
          final long limit = Integer.parseInt(text.getText().trim())* 1000; // X seconds
          timer = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent event) {
              long time = System.currentTimeMillis();
              long passed = time - current;
              long remaining = limit - passed;
              if(remaining <= 0) {
                text.setText(startTime);
                timer.stop();
              } else {
                long seconds = remaining/1000;
                long minutes = seconds/60;
                long hours = minutes/60;
                text.setText(String.format("%02d:%02d:%02d remaining", hours, minutes, seconds%60));
              }
            }
            });
          timer.start();
        } catch(NumberFormatException nfe) {
          // debug/report here
          nfe.printStackTrace();
        }
      }});
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    panel.add(radioPanel);
    panel.add(text);
    panel.add(start, BorderLayout.CENTER );
    add(panel);
  }