2013-10-07 2 views
0

이 코드는 아래 가운데 단추를 누를 때까지 모두 작동합니다.버튼 번호 8을 눌렀을 때 그래픽이 작동하지 않는 이유는 무엇입니까?

import java.awt.*; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

import java.awt.BorderLayout; 
import java.awt.GridLayout; 

import javax.swing.JButton; 
import javax.swing.JLabel; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class memory extends JFrame { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    public void paintComponent(Graphics g) { 
     super.paintComponents(g); 
     g.setColor(new Color(156, 93, 82)); 
     g.fill3DRect(21, 3, 7, 12, true); 
     g.setColor(new Color(156, 23, 134)); 
     g.fillOval(1, 15, 15, 15); 
     g.fillOval(16, 15, 15, 15); 
     g.fillOval(31, 15, 15, 15); 
     g.fillOval(7, 31, 15, 15); 
     g.fillOval(22, 31, 15, 15); 
     g.fillOval(16, 47, 15, 15); 
    } 

    public memory() { 

     GridLayout h = new GridLayout(3, 3); 
     final JFrame frame = new JFrame(); 
     final JPanel pan = new JPanel(h); 
     frame.add(pan); 
     //pan=new JPanel(h); 
     pan.setBackground(new Color(130, 224, 190)); 
     setFont(new Font("Serif", Font.BOLD, 28)); 
     JButton button1 = new JButton(); 
     pan.add(button1); 
     final JLabel label1 = new JLabel("hi"); 
     label1.setVisible(false); 
     pan.add(label1); 
     JButton button2 = new JButton(); 
     pan.add(button2); 
     final JLabel label2 = new JLabel("hi"); 
     label2.setVisible(false); 
     pan.add(label2); 
     JButton button3 = new JButton(); 
     pan.add(button3); 
     final JLabel label3 = new JLabel("hi"); 
     label3.setVisible(false); 
     pan.add(label3); 
     JButton button4 = new JButton(); 
     pan.add(button4); 
     final JLabel label4 = new JLabel("hi"); 
     label4.setVisible(false); 
     pan.add(label4); 
     JButton button5 = new JButton(); 
     pan.add(button5); 
     final JLabel label5 = new JLabel("hi"); 
     label5.setVisible(false); 
     pan.add(label5); 
     JButton button6 = new JButton(); 
     pan.add(button6); 
     final JLabel label6 = new JLabel("hi"); 
     label6.setVisible(false); 
     pan.add(label6); 
     JButton button7 = new JButton(); 
     pan.add(button7); 
     final JLabel label7 = new JLabel("hi"); 
     label7.setVisible(false); 
     pan.add(label7); 
     JButton button8 = new JButton(); 
     pan.add(button8); 
     final JLabel label8 = new JLabel("hi"); 
     label8.setVisible(false); 
     pan.add(label8); 
     JButton button9 = new JButton(); 
     pan.add(button9); 
     final JButton button10 = new JButton("Exit"); 
     pan.add(button10); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setTitle("memory Game"); 
     setLayout(new BorderLayout()); 
     add(pan, BorderLayout.CENTER); 
     add(button10, BorderLayout.SOUTH); 
     setSize(600, 600); 
     setVisible(true); 
     final JLabel label9 = new JLabel("hi"); 
     label9.setVisible(false); 
     pan.add(label9); 
     button1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       label1.setVisible(true); 
      } 
     }); 
     button2.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       label2.setVisible(true); 
      } 
     }); 
     button3.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       label3.setVisible(true); 
      } 
     }); 
     button4.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       label4.setVisible(true); 
      } 
     }); 
     button5.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       label5.setVisible(true); 
      } 
     }); 
     button6.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       label6.setVisible(true); 
      } 
     }); 
     button7.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       label7.setVisible(true); 
      } 
     }); 
//this is where I thought it was going to do something if it was pressed. 
     button8.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       label8.setVisible(true); 
       frame.getContentPane().add(new memory()); 
       setVisible(true); 

      } 
     } 
       ); 
     button9.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       label9.setVisible(true); 
      } 
     } 
       ); 
     button10.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       if (button10.getSize() != null) { 
        System.exit(0); 
       } 
      } 
     }); 

    } 

    public static void main(String args[]) { 
     new memory(); 
    } 

} 
+0

1 거기에서 그림을 수행 ... 죄송 – MadProgrammer

+0

을하지만 어떻게 당신이하고자한다 그렇게? – user2853125

답변

1

memory 연장자 JFrame. 스윙을 사용하면 다른 창에 창을 추가 할 수 없습니다.

최상위 컨테이너에서 확장하지 않아야하며 (이는 단지 이유 일뿐) JPanel과 같은 것을 사용하십시오.

이것은 당신이

JFrame

paintComponent 방법이없는 원하는대로 컨테이너에 구성 요소를 추가 할 수 있습니다, 그래서 호출되지 않습니다. 컴파일하는 이유는 super.paintComponents (결국 s입니다.)입니다.

대신, JPanel 같은 것을에서 확장하고 paintComponent 메소드의 오버라이드 (override) JFrame``전혀`paintComponent`이 없습니다 사용자 정의

+0

어떻게 paintComponent를 재정의합니까? 죄송합니다.이 모든 것을 처음 접했을 때 ... – user2853125

+1

@ user2853125 자세한 내용은 [맞춤 그림 그리기] (http://docs.oracle.com/javase/tutorial/uiswing/painting/)에서 확인하십시오. – MadProgrammer

+0

ok 그래서 나는 그것을 고쳤다 고 생각하지만, 지금은 그렇게 열리지 않습니다. 어떻게해야합니까? 내가 한 모든 것은 JPanel을 확장하고이 줄의 맨 위에 @Override를 추가하기 위해 그것을 변경했습니다. 'public void paintComponent (Graphics g) {'그래서 어떻게해야합니까? 누군가 도와주세요 – user2853125

관련 문제