2017-01-22 4 views
-1

私はこのJFrameJLabel label1としましたが、画像を表示できません。 showScreenShot()が別のクラスによって呼び出されるたびに、更新されたバッファリングされたイメージをラベルに表示するにはどうすればよいですか?JLabelまたはJPanelでバッファリングされたイメージを表示する方法は?

私はEclipse WindowBuilderを使用しています。

は、ここでは、コードです:

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

をこれは 'null'なのでレイアウト、' GroupLayout'と 'パック()'の混乱ミックスです。最初のものを取り除き、後者の2つの使い方を理解してください。 –

答えて

2

これは、少なくとも2つの異なるレベルで間違っている:

label1.getGraphics().drawImage(img, 0, 0, label1.getWidth(), label1.getHeight(), null); 
  1. は、コンポーネントにgetGraphics()を呼び出さないでください。 Swingコンポーネントは、そのように指示されたときに、スイングコンポーネントがペイントする必要があるため、コンポーネントの変更は一時的なものになります。
  2. イメージオブザーバとしてnullを使用しないでください。 AWT/Swingの各コンポーネントはImageObserverを実装しています。

代わりに使用します。

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

私もそれを試みましたが、それでも表示されません。 –

+1

1)すぐに役立つように、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 2)画像を取得する方法の1つは、[このQ&A](http://stackoverflow.com/q/19209650/418556)に表示されている画像にホットリンクすることです。 3)空白の空白行がソースコード内に1つだけあり、これがすべて必要です。 '{'の前または '}'の前の空白行も通常は冗長です。 –

関連する問題