1

我正在尝试将此代码放入 main()

public class TestPane extends JPanel {

    private JTextField field;
    private JButton button;
    private int tick; 
    private Timer timer;

    public TestPane() {

        field = new JTextField(10);
        field.setEditable(false);
        button = new JButton("Start");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                button.setEnabled(false);
                tick = 0;
                timer.start();
            }
        });

        timer = new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("Success" + tick);
                field.setText(Integer.toString(++tick));
                if (tick > 4) {
                    timer.stop();
                    button.setEnabled(true);
                }
            }
        });
        timer.setInitialDelay(0);


        setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        add(field, gbc);
        add(button, gbc);

    }
}

这是做什么的;它会打开一个窗口,然后有一个开始按钮,如果你按下那个开始按钮,它会在一段时间后显示一些文本

我想要做的是将代码放在主函数中,应该发生的是没有开始按钮,当你运行程序时,它应该在某个时间间隔内在该区域设置文本(自动不按下按钮)

我试过但失败了这是代码

public static void main(String args[]) {
    //int tick; 
    // Timer timer;
    final Timer timer = new Timer(1000, new ActionListener() {
        int tick=0;

        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("Success" + ++tick);
            if (tick > 4) {
                ((Timer)e.getSource()).stop(); 
            }
        }
    });
    timer.setInitialDelay(0);
    System.out.format("About to schedule task.%n");
    new NewJFrame();
    System.out.format("Task scheduled.%n");

    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new NewJFrame().setVisible(true);
        }
    });
}

我不知道该怎么办?

4

1 回答 1

3

正如 dict19 所说,你可以这样做,还添加了另一个可以启动它的地方,直接在main方法中,真的取决于你想要实现的目标:

public static void main(String args[]) {

  final Timer timer = new Timer(1000, new ActionListener() {
    int tick = 0;

    @Override
    public void actionPerformed(ActionEvent e) {
      System.out.println("Success" + ++tick);
      if (tick > 4) {
        ((Timer) e.getSource()).stop();
      }
    }
  });

  timer.setInitialDelay(0);
  System.out.format("About to schedule task.%n");
  // timer.start(); Or here
  System.out.format("Task scheduled.%n");

  java.awt.EventQueue.invokeLater(new Runnable() {

    public void run() {
      new NewJFrame().setVisible(true); // previously new Test().setVisible(true);
      timer.start();
    }
  });
}
于 2013-09-23T14:54:08.197 回答