2014-05-13 8 views
0

이 문제에 관해 많은 답변을 보았지만 문제가 해결되지 않은 것 같습니다. 탭 패널 (동일한 탭)에 jPanel1 및 jPanel3이 있고 jPanel1에서 버튼을 클릭하면 jPanel3에서 이미지를로드합니다. 여기 내가 같은버튼 클릭시 JPanel에서 이미지로드

jButton1.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 

      System.out.println("In the action"); 
      try { 
       jPanel3.add(new JPanel(){ 
        java.net.URL imgURL = this.getClass().getResource("/resource/images/cd-dvd-icon.png"); 
        BufferedImage image = ImageIO.read(imgURL); 
       }); 
       jPanel3.revalidate(); 
       jPanel3.repaint(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    }); 

을하려고하지만 오류 또는도 이미지를보고 있지 않다 방법이다. 도와주세요

+0

JPanel은 setIcon 등을위한 생성자를 가지고 있지 않다. 오라클 튜토리얼 2D 그래픽을 읽어야한다. – mKorbel

+0

아래와 같이 코드를 변경했다. javax.swing.ImageIcon icon = new javax.swing.ImageIcon ("/ resource/images/cd-dvd -icon.png "); javax.swing.JLabel label = new javax.swing.JLabel(); label.setIcon (icon); jPanel3.add (label); jPanel3.setSize (50, 50); jPanel3.revalidate(); jPanel3.repaint(); jPanel3.setVisible (true); 심지어 도움이되지 않습니다 – Sundhar

+0

@Sundhar이 코드를 질문에 게시하면 어떻습니까? 다음과 같은 버튼이 있습니다 : [편집] (http://stackoverflow.com/posts/23631980/edit) 그냥 클릭하고 10 줄의 설명에 추가하는 대신 질문에 코드를 삽입하십시오 – Frakcool

답변

0

마지막으로 문제를 파악, 그것은 생성 된 코드에 추가 등 다시 레이아웃을 추가하며

jButton3.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("In the action"); 
      JLabel imgLabel = new JLabel(new ImageIcon(this.getClass().getResource("/resource/images/cd-dvd-icon.png"))); 
      jPanel2.add(imgLabel); 
      jPanel2.revalidate(); 
      jPanel2.repaint(); 
      jPanel2.setLayout(jPanel2Layout); 
      jPanel2Layout.setHorizontalGroup(
       jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(jPanel2Layout.createSequentialGroup() 
        .addGap(24, 24, 24) 
        .addComponent(jButton3) 
        .addGap(59, 59, 59) 
        .addComponent(jToggleButton1) 
        .addGap(50, 50, 50) 
        .addComponent(imgLabel) 
        .addContainerGap(235, Short.MAX_VALUE)) 
      ); 
      jPanel2Layout.setVerticalGroup(
       jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(jPanel2Layout.createSequentialGroup() 
        .addGap(33, 33, 33) 
        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
         .addComponent(jToggleButton1) 
         .addComponent(jButton3)) 
         .addGap(59, 59, 59) 
         .addComponent(imgLabel) 
        .addContainerGap(368, Short.MAX_VALUE)) 
      ); 
     } 

    }); 
을 일했다
+0

도움을 주신 모든 분들께 감사드립니다. – Sundhar

4

이미지를 패널에 추가하고 있지 않습니다. 내부의 이미지로의 JLabel을 만든 다음 jPanel3에 레이블을 추가 :

 try 
     { 
      JLabel imgLabel = new JLabel(new ImageIcon(this.getClass().getResource("/resource/images/cd-dvd-icon.png"))); 
      jPanel3.add(imgLabel); 
      jPanel3.revalidate(); 
      jPanel3.repaint(); 
     }catch (Exception ex){ 
      ex.printStackTrace(); 
     } 
+0

newPanel.add (imgLabel);'에'newPanel.add (image);'를 제공 한 코드는 패널에 버퍼링 된 이미지를 추가 할 방법이 없기 때문에 작동하지 않는다. – Sundhar

+0

이것은'try { java.net.URL imgURL = this.getClass(). getResource ("/resource/images/cd-dvd-icon.png"); BufferedImage image = ImageIO.read (imgURL); JPanel newPanel = 새 JPanel(); JLabel imgLabel = 새 JLabel (새 ImageIcon (이미지)); newPanel.add (imgLabel); jPanel3.add (newPanel); jPanel3.revalidate(); jPanel3.repaint(); } catch (IOException ex) {ex.printStackTrace();}}); ' – Sundhar

+1

샘플을 더 짧게 만들 수 있습니다. 레이블을 jPanel3에 직접 추가 할 수 있으며 ImageIcon에는 매개 변수로 URL이있는 생성자가 있습니다 (ImageIO를 사용하여 읽을 필요가 없습니다) –