Search code examples
javaspringswingspring-bootjframe

How to run a JFrame in a Spring application?


I trie to show a JFrame window but nothing appear (the Spring application boot without any problem)

@SpringBootApplication
public class Application extends JFrame{

JTextField t = new JTextField("test");

Application(){
    add(t);
    setVisible(true);
    pack();
    setLocationRelativeTo(null);
}

public static void main(String[] args) {

    new Application();
    SpringApplication.run(Application.class, args);      

}
}

Solution

  • A simple example of Spring Boot Swing integeration. You can read more details of individual steps in this article

    public class SwingApp extends JFrame {
    
        public SwingApp() {
    
            initUI();
        }
    
        private void initUI() {
    
            var quitButton = new JButton("Quit");
    
            quitButton.addActionListener((ActionEvent event) -> {
                System.exit(0);
            });
    
            createLayout(quitButton);
    
            setTitle("Quit button");
            setSize(300, 200);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
    
        private void createLayout(JComponent... arg) {
    
            var pane = getContentPane();
            var gl = new GroupLayout(pane);
            pane.setLayout(gl);
    
            gl.setAutoCreateContainerGaps(true);
    
            gl.setHorizontalGroup(gl.createSequentialGroup()
                    .addComponent(arg[0])
            );
    
            gl.setVerticalGroup(gl.createSequentialGroup()
                    .addComponent(arg[0])
            );
        }
    
        public static void main(String[] args) {
    
            var ctx = new SpringApplicationBuilder(SwingApp.class)
                    .headless(false).run(args);
    
            EventQueue.invokeLater(() -> {
    
                var ex = ctx.getBean(SwingApp.class);
                ex.setVisible(true);
            });
        }
    }