Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
学习Java Swing:理解框架重画/刷新_Swing_Event Handling - Fatal编程技术网

学习Java Swing:理解框架重画/刷新

学习Java Swing:理解框架重画/刷新,swing,event-handling,Swing,Event Handling,我刚刚开始理解JavaSwing。我想快速编写一些代码来理解事件处理,并编写了以下代码。正如您所见,“inside mouseclicked method!”消息打印到控制台时,事件处理工作正常,但我无法“看到”添加到框架的标签,本例中的标签是我在文本框中键入的任何内容,我输入的字符串不可见,直到我通过拉动框架的角来调整框架的大小!作为初学者,这对我来说有点奇怪。有人能解释一下发生了什么事吗 代码如下: package com.learning.java.gui; import java.aw

我刚刚开始理解JavaSwing。我想快速编写一些代码来理解事件处理,并编写了以下代码。正如您所见,“inside mouseclicked method!”消息打印到控制台时,事件处理工作正常,但我无法“看到”添加到框架的标签,本例中的标签是我在文本框中键入的任何内容,我输入的字符串不可见,直到我通过拉动框架的角来调整框架的大小!作为初学者,这对我来说有点奇怪。有人能解释一下发生了什么事吗

代码如下:

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
        }   
    }

将组件添加到可见GUI时,代码应为:

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

revalidate()确保调用布局管理器,以便为新组件设置大小/位置。repaint()确保在面板上重新绘制所有组件。

将组件添加到可见GUI时,代码应为:

panel.add(...);
panel.revalidate();
panel.repaint();
revalidate()确保调用布局管理器,以便为新组件设置大小/位置。repaint()确保在面板上重新绘制所有组件