質問

I am trying to put this code in 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);

    }
}

What this does is; it opens a window and then there is a start button if u press that start button, it shows some text after some intervals of time

What i want to do is put the code in main function and what should happen is that there is no start button and when u run the program, it should set text in the area in some interval of times (automatically without pressing the button)

I tried BUT FAILED Here is the code

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);
        }
    });
}

I am not able to figure out what to do ?

役に立ちましたか?

解決

As dict19 said, you could do it like this, also added another place you could start it, directly in the main method, really depends on what you want to acheive :

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();
    }
  });
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top