当前位置: 首页 > 知识库问答 >
问题:

J组件未出现

岳俊雅
2023-03-14

我试图创建一个超级简单的组件,但它没有出现。

组件类别:

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JComponent;

public class Player extends JComponent{
    
    public Player() 
    {
    
    }
   
    public void paint(Graphics g)
    {  
        g.setColor(Color.green);  
        g.fillRect(40,40,150,150);  
    }  

   
}

面板类我将其添加到:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;

import javax.swing.JPanel;

public class Game extends JPanel{

    public Game() 
    {
        this.setBackground(Color.yellow);
        this.setPreferredSize(new Dimension(500,500));
        Player p = new Player();
        
        this.add(p);
        
    }
    
}

JFrame:

import javax.swing.JFrame;

public class Launcher {

    public static void main(String[] args) {
        
        JFrame frame = new JFrame("Key Collector Demo");
        
        frame.add(new Game());
        frame.pack();
        
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        
    }

}

唯一出现的是黄色背景。JFrame和JPanel工作正常;在构建jcomponents时,这个问题一直发生在我身上。我错过了什么?

任何帮助都将不胜感激!

共有1个答案

殳越
2023-03-14

用于绘制组件的坐标在该组件的空间中定义。

如果您这样做:

public void paint(Graphics g)
{
    g.setColor(Color.green);
    System.out.println(getSize());
    g.fillRect(40,40,150,150);
}

您将看到,在尝试绘制它的时候,它的大小是1x1。因此,从40,40绘制它显然会将其从组件的可见区域中移除。

现在将方法更改为:

public void paint(Graphics g)
{
    g.setColor(Color.green);
    System.out.println(getSize());
    setSize(45, 45);
    g.fillRect(40,40,150,150);
}

现在你们可以看到一个小的实心矩形。这是因为您强制大小为45x45,现在组件的空间中显示5个像素,而其余部分仍在该区域之外。

 类似资料:
  • 我有一个从JFrame扩展的类。我在它里面有多个JLayeredPanes。我想从一个JLayeredPane切换到另一个JLayeredPane。因为我所做的是; 像 向新的JLayeredPane添加组件并设置边界 下面是一个包含整个java文件的zip文件http://s000.tinyupload.com/index.php?file_id=33381866612121130517

  • 我在这里读这篇社论:https://www.geeksforgeeks.org/given-an-array-arr-find-the-maximum-j-i-such-that-arrj-arri/我无法理解O(n)解是如何工作的。描述它的段落似乎与准则相矛盾。我已经查看了一个示例阵列,手动确保这似乎是可行的,但对我来说,这似乎一点都不直观。 如果有人在解决编程难题方面更有经验,他会愿意解释这是

  • 我正在尝试在一些带有Tomcat服务器的Linux机器上使用AWS EC2上的应用程序。之前,我在局域网上使用Infinispan应用程序,并使用UDP多播进行JGroups成员发现。EC2不支持UDP多播,这是Infinispan用于检测集群中运行的节点的默认节点发现方法。我研究了使用S3\u-PING协议,但我还没有弄清楚为什么它不起作用。 有人知道问题出在哪里吗? 这是我的配置文件:1. A

  • *J

    *J一个Java程序动态分析工具。这个工具包是为两个主要的目的服务: 1.帮助收集Java程序动态执行数据 2.提供一个框架来快速简便地分析这些收集到的数据。

  • 我有一个方法,如果名称与正则表达式匹配,则必须返回true,如果名称具有特殊字符或数字,则必须返回null。 这是方法: 这是对无法通过的方法的测试:

  • 问题内容: 在我的实际项目中,这是我修改后的小程序,偶然发生。 我不知道为什么它给输出 10 吗? 之后,我放了两个零,仍然给出输出10。 然后我将 012 更改 为0123 ,现在输出83? 谁能解释为什么? 问题答案: 比我将012更改为0123,现在输出为83? 因为它被当作八进制基数(8),因为该数字的前导数字为0。因此,它对应的十进制值为10。 012: 0123: