Методы свинга при подаче кнопки - PullRequest
0 голосов
/ 27 января 2012

Как закрыть текущий кадр (Frame1) и открыть уже созданный новый кадр (Frame2) и передать данные в frame2 из frame1 при нажатии кнопки?

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Используйте CardLayout 1 . Либо тот, либо один JFrame и один или несколько JDialog 2 экземпляров.

  1. Как использовать CardLayout
  2. Как сделать диалоги
2 голосов
/ 27 января 2012

Самый лучший способ сделать это, очень много рассказал вам @Andrew Thompson. И другой способ достижения, мотив вопроса, как описано в коде. Здесь, когда вы создаете объект вашего нового JFrame, вы должны передать то, что вам нужно в другом классе, в качестве аргумента другому классу, или вы можете просто передать объект (с этим вы передаете все за один переход к другой класс)

Пример кода для небольшой помощи:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TwoFramesExample
{
    public JFrame frame;
    private JPanel panel;
    private JButton button;
    private JTextField tfield;
    private SecondFrame secondFrame;

    public TwoFramesExample()
    {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);

        panel = new JPanel();
        panel.setLayout(new BorderLayout());

        tfield = new JTextField(10);
        tfield.setBackground(Color.BLACK);
        tfield.setForeground(Color.WHITE);

        button = new JButton("NEXT");
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                // Here we are passing the contents of the JTextField to another class
                // so that it can be shown on the label of the other JFrame.
                secondFrame = new SecondFrame(tfield.getText());                
                frame.dispose();
            }
        });

        frame.setContentPane(panel);
        panel.add(tfield, BorderLayout.CENTER); 
        panel.add(button, BorderLayout.PAGE_END);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new TwoFramesExample();
            }
        });
    }
}

class SecondFrame
{
    private JFrame frame;
    private JPanel panel;
    private JLabel label;
    private JButton button;
    private TwoFramesExample firstFrame;

    public SecondFrame(String text)
    {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);

        panel = new JPanel();
        panel.setLayout(new BorderLayout());

        label = new JLabel(text);
        button = new JButton("BACK");
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                firstFrame = new TwoFramesExample();
                frame.dispose();
            }
        });

        frame.setContentPane(panel);
        panel.add(label, BorderLayout.CENTER);
        panel.add(button, BorderLayout.PAGE_END);

        frame.pack();
        frame.setVisible(true);
    }
}

Надеюсь, это поможет.

Привет

...