2016-04-28 7 views
0

Ich möchte die Anzahl der Monitore erkennen und die gleiche Anzahl von Etiketten anzeigen. Aber setvisible funktioniert nicht. InitialMonitors Detection - Ich möchte jedes Etikett verstecken, in DetectMonitors - zeige einige Etiketten, aber Etiketten immer sichtbar. Ich bin ein Neuling in Java, tut mir leid für die dumme Frage. Danke für jede Hilfe. `java jLabel.setVisible funktioniert nicht

 public MainFrame() { 
     initComponents(); 
      }

public void InititalMonitorsDetection() { Monitor1.setVisible(false); Monitor2.setVisible(false); Monitor3.setVisible(false); Monitor4.setVisible(false); Monitor5.setVisible(false); Monitor6.setVisible(false); Monitor7.setVisible(false); Monitor8.setVisible(false); Monitor9.setVisible(false); Monitor10.setVisible(false); } public void DetectMonitors() { JLabel[] ArMonitors; ArMonitors = new JLabel[11]; ArMonitors[1] = Monitor1; ArMonitors[2] = Monitor2; ArMonitors[3] = Monitor3; ArMonitors[4] = Monitor4; ArMonitors[5] = Monitor5; ArMonitors[6] = Monitor6; ArMonitors[7] = Monitor7; ArMonitors[8] = Monitor8; ArMonitors[9] = Monitor9; ArMonitors[10] = Monitor10; GraphicsEnvironment ge = GraphicsEnvironment. getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge.getScreenDevices(); System.out.println(gs.length); for (int i=1; i <= gs.length; i++){ ArMonitors[i].setVisible(true); } } public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new MainFrame().setVisible(true); } }); MainFrame mainfr = new MainFrame(); mainfr.InititalMonitorsDetection(); mainfr.DetectMonitors();<code>`

Antwort

1

Alle UI-Vorgänge müssen über den Event Dispatcher Thread (EDT) ausgeführt werden. Sie müssen diese Brocken entfernen:

MainFrame mainfr = new MainFrame(); 
mainfr.InititalMonitorsDetection(); 
mainfr.DetectMonitors(); 

Ein Ort, um es hier (zumindest):

java.awt.EventQueue.invokeLater(new Runnable() { 
    public void run() { 
     MainFrame mainfr = new MainFrame(); 
     mainfr.InititalMonitorsDetection(); 
     mainfr.DetectMonitors(); 
    } 
}); 

Ideal wenn Sie Ihre Logik von Ihrem UI Manipulation trennen. Das obige Code-Segment führt alles auf dem EDT aus, was sich in Abhängigkeit von der Dauer der von Ihnen durchgeführten Operationen negativ auf die Reaktionsfähigkeit Ihrer Anwendung auswirken kann.

+0

Danke, es hat geholfen. – vizalerd