2014-09-27 2 views
0

자바에서 이벤트 처리에 문제가 발생했습니다.이벤트 처리를 통해 이미지 삽입 하시겠습니까?

버튼 1을 누르면 image1을 추가하고 버튼 2를 누르면 image2을 추가하고 싶습니다.

이것은 지금까지의 코드입니다. 누구든지 도와 줄 수 있습니까? 이 코드는 컴파일되지 않습니다.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 
import javax.swing.ImageIcon; 

public class MyPanel extends JPanel { 
    private JLabel jcomp1; 
    private JButton jcomp2; 
    private JButton jcomp3; 
    private JButton jcomp4; 
    private JButton jcomp5; 
    private JButton jcomp6; 
    private JButton jcomp7; 
    private JButton jcomp8; 
    private JButton jcomp9; 
    private ImageIcon image1; 
    private ImageIcon image2; 
    private ImageIcon image3; 
    private ImageIcon image4; 
    private ImageIcon image5; 
    private ImageIcon image6; 
    private ImageIcon image7; 
    private ImageIcon image8; 

    public MyPanel() { 
     //construct components 
     image1 = new ImageIcon(getClass().getResource("hang1.jpg")); 
     image2 = new ImageIcon(getClass().getResource("hang2.jpg")); 
     image3 = new ImageIcon(getClass().getResource("hang3.jpg")); 
     image4 = new ImageIcon(getClass().getResource("hang4.jpg")); 
     image5 = new ImageIcon(getClass().getResource("hang5.jpg")); 
     image6 = new ImageIcon(getClass().getResource("hang6.jpg")); 
     image7 = new ImageIcon(getClass().getResource("hang7.jpg")); 
     image8 = new ImageIcon(getClass().getResource("hang8.jpg")); 


     jcomp1 = new JLabel (image1); 
     jcomp2 = new JButton ("1"); 
     jcomp3 = new JButton ("2"); 
     jcomp4 = new JButton ("3"); 
     jcomp5 = new JButton ("4"); 
     jcomp6 = new JButton ("5"); 
     jcomp7 = new JButton ("6"); 
     jcomp8 = new JButton ("7"); 
     jcomp9 = new JButton ("8"); 

     //events 
     jcomp2.setActionCommand("1"); 
     jcomp3.setActionCommand("2"); 
     jcomp4.setActionCommand("3"); 
     jcomp5.setActionCommand("4"); 
     jcomp6.setActionCommand("5"); 
     jcomp7.setActionCommand("6"); 
     jcomp8.setActionCommand("7"); 
     jcomp9.setActionCommand("8"); 


     jcomp2.addActionListener(new ButtonClickListener()); 
     jcomp3.addActionListener(new ButtonClickListener()); 
     jcomp4.addActionListener(new ButtonClickListener()); 
     jcomp5.addActionListener(new ButtonClickListener()); 
     jcomp6.addActionListener(new ButtonClickListener()); 
     jcomp7.addActionListener(new ButtonClickListener()); 
     jcomp8.addActionListener(new ButtonClickListener()); 
     jcomp9.addActionListener(new ButtonClickListener()); 


     //adjust size and set layout 
     setPreferredSize(new Dimension(624, 537)); 
     setLayout(null); 

     //add components 

     add(jcomp2); 
     add(jcomp3); 
     add(jcomp4); 
     add(jcomp5); 
     add(jcomp6); 
     add(jcomp7); 
     add(jcomp8); 
     add(jcomp9); 

     // set component bounds (only needed by Absolute Positioning) 
     jcomp1.setBounds(15, 10, 595, 350); 
     jcomp2.setBounds(35, 375, 100, 25); 
     jcomp3.setBounds(190, 375, 100, 25); 
     jcomp4.setBounds(320, 375, 100, 25); 
     jcomp5.setBounds(465, 375, 100, 25); 
     jcomp6.setBounds(35, 450, 100, 25); 
     jcomp7.setBounds(190, 450, 100, 25); 
     jcomp8.setBounds(320, 450, 100, 25); 
     jcomp9.setBounds(465, 450, 100, 25); 
    } 

    class ButtonClickListener implements ActionListener{ 
     public void actionPerformed(ActionEvent e) { 
      String command = e.getActionCommand(); 
      if (command.equals("1")) { 
       jcomp1.set(image1); 
      } 

     }  
    } 


    public static void main (String[] args) { 
     JFrame frame = new JFrame("MyPanel"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new MyPanel()); 
     frame.pack(); 
     frame.setVisible (true); 
    } 
} 
+1

'jcomp1.set (image)'API 문서의'JLabel'에 대한'set' 메소드를 찾을 수 없습니다 –

+0

프로그래밍에서 * loop *에 대해 들어 본 적이 있습니까? – user1803551

+0

* "이 코드는 컴파일되지 않습니다."* 왜 그런가요? 컴파일러는 당신에게 무엇을 말합니까? – user1803551

답변

0

단추 또는 레이블의 아이콘을 설정하십시오. 이렇게하려면 파일 이름이나로드 된 이미지에서 생성자를 여러 개 생성하는 ImageIcon을 만들어야합니다.

jcomp1.setIcon(new ImageIcon(...));

+0

감사합니다 ControlAtlDel ..이게 내 문제를 해결했습니다. –

1

난 당신이 이런 식으로 뭔가를 얻으려고 노력하고 있습니다 생각 :

public class MyPanel extends JPanel { 

    private JLabel label; 
    private JButton[] buttons = new JButton[8]; 
    private ImageIcon[] images = new ImageIcon[8]; 

    public MyPanel() { 

     JPanel buttonPanel = new JPanel(new GridLayout(2, 4, 15, 10)); 

     for (int i = 0; i < images.length; i++) { 
      images[i] = new ImageIcon(getClass().getResource(i+1 + ".png")); 
      buttons[i] = new JButton(String.valueOf(i+1)); 
      buttons[i].setActionCommand(String.valueOf(i+1)); 
      buttons[i].addActionListener(new ButtonClickListener()); 
      buttonPanel.add(buttons[i]); 
     } 
     label = new JLabel(images[0]); 

     setLayout(new BorderLayout()); 
     add(label); 
     add(buttonPanel, BorderLayout.PAGE_END); 
    } 

    class ButtonClickListener implements ActionListener { 

     public void actionPerformed(ActionEvent e) { 

      label.setIcon(images[Integer.parseInt(e.getActionCommand()) - 1]); 
     } 
    } 

    public static void main(String[] args) { 

     JFrame frame = new JFrame("MyPanel"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new MyPanel()); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

참고 :

  • 이미지 파일의 이름을 변경하는 것을 잊지 마십시오.
  • 레이아웃 관리자로 원하는 것을 얻을 수 있습니다.
  • setPreferredSize(new Dimension(624, 537));을 제거했습니다.이 줄을 의미없는 것으로 만드는 크기 조정 동작을 지정하지 않았기 때문입니다. pack()은 크기를 관리합니다.
관련 문제