web-dev-qa-db-fra.com

Comment ouvrir une nouvelle fenêtre en cliquant sur un bouton

Dans le cadre de mon programme, j'ai besoin d'un bouton qui, lorsque l'utilisateur clique dessus, ouvre une nouvelle fenêtre.

Eh bien, je suppose que je devrais avoir une classe qui fait le cadre et l'appelle par le bouton. mais je n'ai aucune idée de commencer. Je viens de mettre mon bouton dans le programme, mais cela ne fonctionne pas. Alors, certains peuvent-ils me dire comment le faire? ou codez-le.

7
Alex Jj

Voici une version simplifiée de ce que vous voulez faire:

JButton button = new JButton("New Frame");
button.addActionListener( new ActionActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        // Create a method named "createFrame()", and set up an new frame there
        // Call createFrame()
    }
});

Vous voudrez probablement appeler une méthode dans le ActionListener plutôt que de faire le frame sur actionPerformed. Peut-être quelque chose comme ça:

public static void createFrame()
    {
        EventQueue.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                try 
                {
                   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception e) {
                   e.printStackTrace();
                }
                JPanel panel = new JPanel();
                panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
                panel.setOpaque(true);
                JTextArea textArea = new JTextArea(15, 50);
                textArea.setWrapStyleWord(true);
                textArea.setEditable(false);
                textArea.setFont(Font.getFont(Font.SANS_SERIF));
                JScrollPane scroller = new JScrollPane(textArea);
                scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
                scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
                JPanel inputpanel = new JPanel();
                inputpanel.setLayout(new FlowLayout());
                JTextField input = new JTextField(20);
                JButton button = new JButton("Enter");
                DefaultCaret caret = (DefaultCaret) textArea.getCaret();
                caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
                panel.add(scroller);
                inputpanel.add(input);
                inputpanel.add(button);
                panel.add(inputpanel);
                frame.getContentPane().add(BorderLayout.CENTER, panel);
                frame.pack();
                frame.setLocationByPlatform(true);
                frame.setVisible(true);
                frame.setResizable(false);
                input.requestFocus();
            }
        });
    }

À quoi devrait ressembler ce cadre:

enter image description here

6
syb0rg