Java 我能';在JApplet中看不到我的JPanel及其组件

Java 我能';在JApplet中看不到我的JPanel及其组件,java,swing,Java,Swing,我想把JPanel放在JApplet中,问题是我看不到它:(我已经覆盖了我的JPanel的paintComponent以获得背景图像,但我什么也看不见。当我删除我覆盖的paintComponenet方法,并为该面板的背景设置颜色时,JPanel似乎填充了JApplet而仍然没有任何组件nt可见:-S我尝试了不同的布局。我还将面板放在另一个面板的中心,该面板填充了我的JApplet,但没有任何更改,仍然没有组件和背景图像可见:( 上面的代码可以编译。我甚至不能将Keylistener添加到我的JP

我想把
JPanel
放在
JApplet
中,问题是我看不到它:(我已经覆盖了我的
JPanel
paintComponent
以获得背景图像,但我什么也看不见。当我删除我覆盖的
paintComponenet
方法,并为该面板的背景设置颜色时,
JPanel
似乎填充了
JApplet
而仍然没有任何组件nt可见:-S我尝试了不同的布局。我还将面板放在另一个面板的中心,该面板填充了我的
JApplet
,但没有任何更改,仍然没有组件和背景图像可见:(

上面的代码可以编译。我甚至不能将
Keylistener
添加到我的
JPanel
或我的
JApplet
。我使用
java.awt.KeyEventDispatcher
DispatcheckKeyEvent(KeyEvent e)
在控制台中打印了一些东西,但打印了3次:(

我已经覆盖了JPanel的paintComponent以获得背景图像

但您没有将自定义组件添加到小程序:

//boardPanel = new JPanel();
boardPanel = new ClientViewManager();
此外:

  • 去掉setVisible()。这不是程序中任何控件所必需的。默认情况下,除顶级容器(Jframe、JDialog等)之外的所有组件都已可见。对于JApplet,不需要使其可见,因为这是显示小程序过程的一部分
  • 去掉setSize()和setLocation(),这样无法控制小程序的位置
  • 不要在paintComponent()方法中读取图像文件。这是无效的,因为每当Swing确定组件需要重新绘制时,都会调用此方法
  • jlabel在默认情况下是不透明的,因此不需要调用setOpaque方法
  • 在进行自定义绘制时,还应覆盖组件的getPreferredSize()方法,以返回自定义绘制的正确大小,以便布局管理器可以使用此信息。在这种情况下,此方法有效,因为您将面板添加到了BorderLayout的中心。请尝试将面板添加到北部,以查看发生了什么
  • 编辑:

    现在我看到了添加ClientViewManager的地方。我不知道为什么要尝试使用线程来执行此操作,但还是有几个问题

  • 从Visible GUI添加/删除组件时,基本代码为:

    面板。添加(…);
    panel.revalidate();
    panel.repaint()

  • 但是,这仍然不起作用,因为您使用的是空布局,面板的大小为0。请使用适当的布局管理器,并按照上述建议实现getPreferredSize()方法,组件将正确显示


  • 我建议您使用Netbeans的GUI生成器来构建这样一个GUI,然后将生成的代码与您的代码进行比较。Netbeans的结果对帮助您创建swing代码非常有用。

    小兔子富福是对的。@Maryam:“plzzzzz help”请1)停止使用诸如“plzzz”之类的无意义拼写2)停止对我们大喊大叫。3)问一个问题。-1,这是一个评论,不是问题的答案。即使这是一个答案,我也会投反对票,因为你永远不应该将你的代码与生成的代码进行比较,因为代码生成从来都不是有效的。好吧,这是一个评论,我同意,但对于解决这个问题,这是我能想到的更严格的方式,而不是改变到处都是g代码。我没有使用过Netbeans,我想学习它需要一些时间。不幸的是,我没有足够的时间学习它。我应该在下周发送我的作业。但是,谢谢你的建议,;)@jaime:
    “为了解决这个问题,这是我能想到的更直接的方法,而不是到处更改代码“
    ,因此无法理解Swing的工作原理。这个解决方案不会帮助原始海报学到任何东西。@Hovercraft满是鳗鱼你误解了我,首先你用netbeans创建GUI,然后你检查生成的代码,然后你可以将生成的副本作为参考谢谢你回答我,但我无法理解你所说的“你没有将自定义组件添加到你的小程序”是什么意思:“>[我把它放在运行方法中]顺便说一句,我想我做了你说的,我覆盖了getPreferredSize(),但sry my JApplet仍然是空的:(我想问题出在图像上,因为我看到标签里面有文本,但没有面板的背景图像:(阅读我的编辑。你的代码没有任何意义。在init()中)方法添加一个空面板。我给你的简单解决方案是此时添加ClientViewManager。出于某种原因,在start()中方法创建一个线程来添加ClientViewManager。这非常令人困惑。当我使用Appletviewer运行代码时,图像可以很好地加载。通常在使用小程序时,您不会使用图像图标来加载图像。我建议您查看关于“如何制作小程序”()的Swing教程举个如何加载图像的例子。你说得对。我的代码看起来很混乱,但这段代码是一个更大类的一部分。你介意告诉我应该怎么做才能在我的小程序中放置一个keylistener吗?(它不起作用4我)我使用了KeyEventDispatcher,这很有效,但问题是所有事情都会发生3次:-/每次击键都会生成3个事件,“按下按钮、键入按钮、释放按钮",因此您需要检查事件代码。KeyEvents转到具有焦点的组件。因此您需要向小程序添加一个面板。使面板可聚焦,并将KeyLIstener添加到面板。如果您需要更多帮助,则需要创建另一个SSCCE,该SSCCE只处理该问题,并创建另一个问题,因为每个线程应该只有一个问题问题。然后您可以接受此线程的答案并继续。
    //boardPanel = new JPanel();
    boardPanel = new ClientViewManager();