Java Toggeln der sichtbarkeit von Jlabel

Tron36

Ensign
Dabei seit
Jan. 2011
Beiträge
174
Hallo Leute,
Es geht darum, dass auf einer Oberfläche, mit einem sichtbaren Label (im Code die variable lblX) "unsichtbar" gemachen und anschließend nach 2 sekunden wieder sichtbar gemachen werden soll. Den Code habe ich zwar soweit, der Label lässt sich jedoch nicht unsichtbar machen. Was ich auch bemerkt habe ist, dass die "abwahl" der Checkboxen erst nach der Verzögerung von 2 sekunden passiert, was eigl nicht der fall sein dürfte. Habe zwar gegoogelt aber nichts gefunden.
Im folgenden der Code:
Java:
    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;
      
        private String status;
        private String answer;
        private int diff;
        private int sec;
        private int count;
        /**
         * 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);
            checkPanel.setVisible(false);
           
            System.out.println("Bevor Sleep");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("After Sleep");
           
            lblX.setVisible(true);
            checkPanel.setVisible(true);
        }
   
    }

Ich hoffe Ihr könnt mir weiter helfen.

Viele Grüße
Padawan
 

Belfour

Cadet 3rd Year
Dabei seit
Nov. 2010
Beiträge
32
Das Event von deinem Button (ActionEvent) wird vom EventDispatchThread getriggert. Das ist auch der Thread, der deine UI Anpassungen durchführt. Vor diesem Hintergrund überlege mal, wo die 2 Sekunden her kommen könnten.
 

Rossie

Commodore
Dabei seit
Dez. 2010
Beiträge
4.351
Was du benötigst, ist ein Timer, um eine Aktion nach Ablauf von 2 Sekunden auszulösen. Wichtig ist dabei, die Regeln für den EDT zu beachten. Swing bringt deswegen einen eigenen Timer mit (javax.swing.Timer), aber man kann auch die anderen Möglichkeiten der Runtime nutzen, sollte dann aber aufpassen, dass man Aktionen die die GUI ändern, im EDT ausführt.
 
Top