Переключить видимость Jlabel и JPanel - PullRequest
1 голос
/ 22 октября 2019

Я пытаюсь переключить видимость JLable и JPanel. Оба в исходном случае в видимом состоянии. После нажатия кнопки они должны быть невидимыми в течение двух секунд. По истечении этого времени они снова будут видны. Кроме того, на JPanel есть два флажка, которые сгруппированы по ButtonGroup. Выбор должен быть очищен после нажатия кнопки.

Для решения я написал следующий код:

package Aufgaben;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.EmptyBorder;

public class Aufgabe1 extends JFrame {

    private JPanel contentPane;
    private JPanel checkPanel;
    private JPanel pointPanel;

    private JRadioButton rdbtnJa;
    private JRadioButton rdbtnNein;
    private ButtonGroup btnGroup; 

    private JButton btnStart;
    private JLabel lblX;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Aufgabe1 frame = new Aufgabe1();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Aufgabe1() {setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 700, 300);
        contentPane = new JPanel();
        setContentPane(contentPane);
        contentPane.setLayout(null);

        btnStart = new JButton("Start");
        btnStart.setBounds(0, 0, 684, 23);
        contentPane.add(btnStart);

            checkPanel = new JPanel();
            checkPanel.setBounds(0, 229, 684, 33);
            contentPane.add(checkPanel);

            btnGroup = new ButtonGroup();

            rdbtnJa = new JRadioButton("Ja");
            checkPanel.add(rdbtnJa);
            btnGroup.add(rdbtnJa);

            rdbtnNein = new JRadioButton("Nein");
            checkPanel.add(rdbtnNein);
            btnGroup.add(rdbtnNein);

        pointPanel = new JPanel(new BorderLayout());
        pointPanel.setBackground(Color.BLACK);
        pointPanel.setBounds(0, 23, 684, 209);
        contentPane.add(pointPanel);

        lblX = new JLabel("X");
        lblX.setForeground(Color.WHITE);
        lblX.setVerticalAlignment(JLabel.CENTER);
        lblX.setHorizontalAlignment(JLabel.CENTER);
        pointPanel.add(lblX, BorderLayout.CENTER);

        run();
    }
    public void run() {
        System.out.println("----------");
        System.out.println("Method run()");
        btnStart.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("btn actionPerformed()");
                createLightPoint();
            }
        });
    }

    private void createLightPoint() {
        System.out.println("----------");
        System.out.println("Method createLightPoint()");
        btnGroup.clearSelection();
        lblX.setVisible(false);
//        lblX.repaint();
//        pointPanel.repaint();
        checkPanel.setVisible(false);
//        checkPanel.repaint();

        System.out.println("Bevor Sleep");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("After Sleep");

        lblX.setVisible(true);
//        lblX.repaint();
        checkPanel.setVisible(true);
//        checkPanel.repaint();
    }

}

Как видите, я попытался решить проблемы (что я описал выше) в течениефункция .setVisibility(), а также .repaint(). Я попробовал функции .show() и .hide, хотя они также являются устаревшими. Но в любом случае это не работает.

Я уже прочитал следующие сообщения:

Показать / скрыть JLabel с помощью кнопки?

https://softwareengineering.stackexchange.com/questions/233068/is-better-show-hide-or-setvisiblebool-visible

Но никто из них не может помочь решить мою проблему.

Я надеюсь, что вы можете помочь мне.

1 Ответ

0 голосов
/ 22 октября 2019

Не использовать sleep() в Поток отправки событий - это предотвратит обработку потока рисованием и другими событиями, связанными с пользовательским интерфейсом, и пользовательский интерфейс будет заморожен. Для получения более подробной информации см. Обучающая нить диспетчеризации событий .

Вместо этого можно использовать таймер Swing, см. Как использовать учебное пособие Swing Timers .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...