Да, это можно сделать, но на самом деле это не имеет смысла, поскольку ваша цель не в том, чтобы нажать кнопку или вызвать код ActionListener, а в том, чтобы иметь общее поведение при нажатии кнопки и при запуске программы , Для меня лучший способ добиться этого - иметь метод, который вызывается как методом actionPerformed ActionListener, так и классом при запуске.
Вот простой пример. В приведенном ниже коде метод отключает кнопку, превращает JPanel в зеленый цвет и запускает таймер, который через 2 секунды включает кнопку и сбрасывает цвет фона JPanel по умолчанию. Метод, вызывающий такое поведение, вызывается как в конструкторе основного класса, так и в методе actionPerformed JButton's ActionListener:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ActionOnStartUp extends JPanel {
private static final int PANEL_W = 400;
private static final int PANEL_H = 300;
private static final int TIMER_DELAY = 2000;
private JButton turnGreenBtn = new JButton("Turn Panel Green for 2 seconds");;
public ActionOnStartUp() {
turnPanelGreen();
turnGreenBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
turnPanelGreen();
}
});
add(turnGreenBtn);
}
public void turnPanelGreen() {
setBackground(Color.green);
turnGreenBtn.setEnabled(false);
new Timer(TIMER_DELAY, new ActionListener() {
public void actionPerformed(ActionEvent ae) {
setBackground(null);
turnGreenBtn.setEnabled(true);
((Timer) ae.getSource()).stop(); // stop the Timer
}
}).start();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(PANEL_W, PANEL_H);
}
public static void createAndShowGui() {
JFrame frame = new JFrame("Foo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new ActionOnStartUp());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}