2013-11-01 7 views
1

자바 스윙을 이해하기 시작했습니다. 이벤트 처리를 이해할 수있는 코드를 빠르게 작성하고 다음 코드를 작성했습니다. 이벤트 처리가 "내부 mouseclicked 메서드"로 괜찮 았던 것을 볼 수 있듯이! 메시지가 콘솔에 인쇄되었지만 프레임에 추가 된 레이블을 볼 수 없습니다.이 경우 레이블은 텍스트 상자에 입력 한 것과 같습니다. 입력 한 문자열은 구석을 당겨서 프레임의 크기를 조정할 때까지 표시되지 않습니다. ! 이것은 초보자로서 나를 조금 이상하게 만든다. 누군가 일어날 일을 설명해 주시겠습니까? 당신이 볼 GUI에 구성 요소를 추가 할 때자바 스윙 학습 : 프레임 다시 그리기/새로 고침 이해하기

package com.learning.java.gui; 

import java.awt.FlowLayout; 
import java.awt.Label; 
import java.awt.TextField; 
import java.awt.event.MouseEvent; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.event.MouseInputListener; 

    public class FirstGUIFrame extends JFrame{ 
     private static FirstGUIFrame firstgui=null; 

     FirstGUIFrame(){ 
      setLayout(new FlowLayout()); 
      setDefaultCloseOperation(EXIT_ON_CLOSE); 
      setVisible(true); 
      setSize(600,400); 
     } 

     public static FirstGUIFrame getFrameObj(){ 
      return firstgui; 
     } 


     public static void main(String ar[]){  
      firstgui = new FirstGUIFrame(); 
      JLabel name = new JLabel("UserName:"); 
      TextField textfield = new TextField("enter you name here", 15); 
      JButton jbutton = new JButton("Enter"); 
      jbutton.addMouseListener(new buttonListener()); 

      firstgui.add(name); 
      firstgui.add(textfield); 
      firstgui.getContentPane().add(jbutton); 

     } 
    } 


    class buttonListener implements MouseInputListener{ 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      FirstGUIFrame frame = FirstGUIFrame.getFrameObj(); 
      System.out.println("inside mouseclicked method!"); 
      frame.getContentPane().add(new JLabel("Clicked!!"));  
     } 

     @Override 
     public void mousePressed(MouseEvent e) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void mouseReleased(MouseEvent e) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void mouseEntered(MouseEvent e) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void mouseExited(MouseEvent e) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void mouseDragged(MouseEvent e) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void mouseMoved(MouseEvent e) { 
      // TODO Auto-generated method stub 
     } 
    } 

답변

1

코드가 있어야한다 : 여기

코드입니다

panel.add(...); 
panel.revalidate(); 
panel.repaint(); 

재 검증은() 레이아웃 매니저가 그래서를 호출입니다 확인합니다 크기/위치가 새 구성 요소에 대해 설정됩니다. repaint()는 모든 구성 요소가 패널에 다시 그려지는지 확인합니다.