2013-11-01 40 views
1

我刚开始理解Java Swing。我想快速编写一些代码来理解事件处理并编写下面的代码。正如你所看到的,事件处理工作正常,因为“内部鼠标点击的方法!”消息被打印到控制台,但我无法'看到'添加到框架的标签,这种情况下的标签是我在文本框中输入的任何内容,我输入的字符串不可见,除非通过拉动它的角来调整框架大小!作为初学者,这对我来说有点奇怪。有人可以解释发生了什么吗?学习Java Swing:了解框架重新绘制/刷新

下面是代码:

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

当你将组件添加到一个可见的GUI代码应该是:

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

的重新验证()确保布局管理器是调用所以大小/位置是为您的新组件设置的。 repaint()确保所有组件都在面板上重新绘制。