java - 组件未按预期添加到框架中

标签 java events event-handling

我正在研究事件处理并执行以下操作:

  • 创建了一个没有任何组件的 JFrame

  • 我重写了 keyPressed() 方法,这样每当从键盘按下一个键时,框架中就会出现一个按钮(通过使用 add() 然后调用 repaint())。 现在我想问的是,在从键盘按下按键时,没有任何内容被添加到框架中,但是当我调整框架窗口大小时按下该键后,按钮从窗口中的任何地方出现框架.... 发生了什么事?

     import java.awt.*;
     import java.awt.event.*;
     import javax.swing.*;
    
     class MyFrame extends JFrame implements KeyListener
     {
     private JButton bt=new JButton();
     MyFrame()
     {
     addKeyListener(this);  
     }
     public void keyPressed(KeyEvent ke)
     {
    
    this.add(bt);
    repaint(); 
     }
     public void keyTyped(KeyEvent ke)
     {
    
     }
     public void keyReleased(KeyEvent ke)
     {
    
     }
        }
    
    
         public class MyClass    /*class containing the main method*/
        {
    
          public static void main(String args[])
      {
    MyFrame frm=new MyFrame();
    frm.setVisible(true);
    frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    }
     }
    

最佳答案

,nothing was being added to the frame,

组件已添加到框架中。问题是它的大小为 (0, 0),所以没有什么可绘制的

however after pressing the key when i resized the frame WINDOW,the button came out from nowwhere in the frame

调用布局管理器,并根据布局管理器的规则为组件指定大小和位置。现在您可以看到该组件了。

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

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

关于java - 组件未按预期添加到框架中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16740240/

相关文章:

java - 了解 gradle 多项目构建

java - 单元测试的依赖注入(inject)与管理自己变量的类

javascript - jQuery 检查是否单击左 ctrl + 左 shift 和左 ctrl + 右 shift

java - 根据共享首选项设置 ImageView 的可见性

java - 如何限制activemq中的用户?

非输入元素的 JavaScript 事件监听器

java - 使用 onclick 或 ID 执行方法?

c# - 如何取消订阅使用 lambda 表达式的事件?

qt - QT 中未记录的 ProcessEventsFlag 枚举

javascript - 如何保留这个 jQuery 事件处理程序?