Java GUI переключение активности окон

174
12 октября 2017, 09:45

Cоздал Dialog:

Все было нормально, пока я не решил создать кнопку, при нажатию на которую происходило создание другого фрейма. Он создается и выводится на экран, но он не активен (то есть я не могу работать с ним). Потратил много времени, ничего не вышло. Нужно чтобы всплывающее окно становилось активным, а после закрытия активность переходила в главное окно. setVisible, enable - не работают.
Почему баттоны на русском(так при добавлении программа создает, я не трогаю)? Кнопка: добавить игрока.

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.Dimension;
import java.net.URL;
public class AA extends JDialog {
    private JPanel contentPane;
    private JButton buttonOK;
    private JButton button1;
    private JButton отсортироватьButton;
    private JButton найтиButton;
    private JTextField textField1;
    private JButton удалитьИгрокаButton;
    private JButton button2;
    private JRadioButton radioButton1;
    private JRadioButton radioButton2;
    private JTextField textField2;
    private JButton добавитьИгрокаButton;
    static Manager Mas= new Manager();
    public AA() {
        ButtonGroup group = new ButtonGroup();
        setTitle("FtManager");
        FootballMan a = new FootballMan(30,15,"dasd","dasd","dasd",
                "dasd", "dasd", "dasd");
        Mas.Add(a);
        FootballMan b = new FootballMan(15,30,"dasd","dasd","dasd",
                "dasd", "dasd", "dasd");
        Mas.Add(b);
        radioButton1.setSelected(true);
        group.add(radioButton2);
        group.add(radioButton1);
        setLocation(500,260);
        setContentPane(contentPane);
        setModal(true);
        getRootPane().setDefaultButton(buttonOK);
        String path = "1.png";
        URL imgURL = AA.class.getResource(path);
        ImageIcon icon = new ImageIcon(imgURL);
        найтиButton.setIcon(icon);
        String path1 = "2.png";
        URL imgURL1 = AA.class.getResource(path1);
        ImageIcon icon1 = new ImageIcon(imgURL1);
        удалитьИгрокаButton.setIcon(icon1);
        String path3 = "3.png";
        URL imgURL3 = AA.class.getResource(path3);
        ImageIcon icon3 = new ImageIcon(imgURL3);
        button2.setIcon(icon3);
        String path4 = "4.png";
        URL imgURL4 = AA.class.getResource(path4);
        ImageIcon icon4 = new ImageIcon(imgURL4);
        отсортироватьButton.setIcon(icon4);
        button1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                JFrame frame = new JFrame("Все игроки");
                frame.setSize(350,200);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLocation(160,300);
                frame.setVisible(true);
                JTextArea textAr= new JTextArea();
                Mas.cout(textAr);
                frame.add(textAr);
            }
        });
        отсортироватьButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Mas.sort();
            }
        });
        найтиButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JTextArea textAr= new JTextArea();
                frame(textAr,"Найденный игрок");
                Mas.search(textField1.getText(),textAr);
            }
        });
        удалитьИгрокаButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Mas.Delete(textField1.getText());
                JTextArea textAr= new JTextArea();
                frame(textAr,"Уменьшенный массив");
                Mas.cout(textAr);
            }
        });

        button2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                boolean key;
                if(radioButton1.isSelected()==true){
                    key=true;
                }
                else{ key=false;}
                Mas.editing(textField1.getText(),key,textField2);
            }
        });
        textField2.addFocusListener(new FocusAdapter() {
            @Override
            public void focusGained(FocusEvent e) {
                textField2.setText(null);
            }
        });
        textField1.addFocusListener(new FocusAdapter() {
            @Override
            public void focusGained(FocusEvent e) {
                textField1.setText(null);
            }
        });
       /////////// это событие и должно создать активное окно
        добавитьИгрокаButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JFrame frame = new JFrame();
                JButton but = new JButton("dsas");
                frame.setSize(400,200);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLocation(400,400);
                frame.setVisible(true);
            }
        });
    }

    public void frame(JTextArea textAr,String title){
        JFrame frame = new JFrame(title);
        frame.setSize(400,200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(400,400);
        frame.setVisible(true);
        frame.add(textAr);
    }
    public static void main(String[] args) {
        AA dialog = new AA();
        dialog.pack();
        dialog.setVisible(true);
        System.exit(0);
    }
}

Были попытки создать не фрейм, а диалог, все так же. Да и к чему? Я знаю, что при создании одиночных фреймов нет проблем с их активностью.

P.S. Я новичок.

Answer 1

Возникает сразу несколько вопросов, например, почему Вы наследуетесь от JDialog вместо JFrame и так далее. Но возможно быстрее будет просто указать Вам работающий код, который Вы наполните своими элементами.

import javax.swing.*;
public class Main extends JFrame {
    public Main() {
        setTitle("Main Frame");
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton jButton = new JButton("Click Here");
        jButton.addActionListener(s -> {
            new AdditionalFrame();
        });
        add(jButton);
        pack();
    }
    public static void main(String[] args) {
        new Main();
    }
}
class AdditionalFrame extends JFrame {
    public AdditionalFrame() {
        setTitle("Additional Frame");
        setVisible(true);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        pack();
    }
}

При запуске данного приложение откроется Main Frame окно с одной единственной кнопкой, по нажатию кнопки будет открыто второе окно Additional Frame, которое появится в середине экрана и на который будет установлен фокус и которое будет полностью clickable.

Надеюсь это поможет двигаться дальше.

READ ALSO
Что такое статический полиформизм?

Что такое статический полиформизм?

Наткнулся на такой термин - "статический полиформизм"Не знал про такое сочетание

197
webView не отображает страницу на android ниже 4.4.4

webView не отображает страницу на android ниже 4.4.4

Раньше работало на версиях от 41, теперь не работает до 4

237
Авторизация в БД MySQL C# WPF MVVM

Авторизация в БД MySQL C# WPF MVVM

Здравствуйте! Пишу авторизацию на C# WPF MVVM в БД MySQL, используя EF6Необходимо написать команду, которая будет выполняться при нажатии на кнопку...

896