2017-01-22 1 views
-1

Ich habe diese JFrame mit JLabel label1, aber ich kann es nicht das Bild anzeigen. Wie zeige ich das aktualisierte gepufferte Bild im Etikett jedes Mal an, wenn der showScreenShot() von einer anderen Klasse aufgerufen wird?Wie wird das gepufferte Bild in JLabel oder JPanel angezeigt?

Ich benutze Eclipse WindowBuilder.

Hier ist der Code:

public class TeacherDashBoard extends JFrame { 

    private JPanel contentPane; 
    private BufferedImage img; 
    private static TeacherDashBoard frame; 
    private static JLabel label1; 

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

    public void showScreenShot(byte[] bytes) throws IOException { 
     img = ImageIO.read(new ByteArrayInputStream(bytes)); 
     label1.getGraphics().drawImage(img, 0, 0, label1.getWidth(), label1.getHeight(), null); 
    } 

    public TeacherDashBoard() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 424); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     label1 = new JLabel(); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
      .addGap(29) 
      .addComponent(label1, GroupLayout.PREFERRED_SIZE, 210, GroupLayout.PREFERRED_SIZE) 
      .addContainerGap(591, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(layout.createParallelGroup(Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
      .addGap(96) 
      .addComponent(label1, GroupLayout.PREFERRED_SIZE, 104, GroupLayout.PREFERRED_SIZE) 
      .addContainerGap(333, Short.MAX_VALUE)) 
     ); 
     getContentPane().setLayout(layout); 

     pack(); 
    } 
} 
+0

Dies ist eine verwirrende Mischung von 'null' Layout ist,' GroupLayout' und 'pack()'. Lassen Sie die erste fallen und finden Sie heraus, wie Sie die letzten beiden verwenden können. –

Antwort

2

Das ist falsch an mindestens zwei verschiedenen Ebenen:

label1.getGraphics().drawImage(img, 0, 0, label1.getWidth(), label1.getHeight(), null); 
  1. Rufen Sie nicht getGraphics() auf Komponenten. Die Änderungen an der Komponente werden kurzlebig sein, da Swing-Komponenten sich selbst malen müssen, wenn und wie sie dazu aufgefordert werden.
  2. Verwenden Sie nicht null als Bildbetrachter. Jede Komponente in AWT/Swing implementiert ImageObserver. verwenden

Statt:

label1.setIcon(new ImageIcon(img)); 
+0

Ich habe das auch versucht, aber es wird immer noch nicht angezeigt. –

+1

1) Für bessere Hilfe früher, post ein [MCVE] oder [kurze, selbständige, korrekte Beispiel] (http://www.sscce.org/). 2) Eine Möglichkeit, Bilder für ein Beispiel zu erhalten, besteht darin, eine direkte Verbindung zu Bildern herzustellen, die in [diesem Q & A] (http://stackoverflow.com/q/19209650/418556) zu sehen sind. 3) Eine einzelne Leerzeile von Leerraum im Quellcode ist alles, was * jemals * benötigt wird. Leere Zeilen nach '{' oder vor '}' sind normalerweise redundant. –

Verwandte Themen