【问题标题】:java applet buttonsjava小程序按钮
【发布时间】:2010-07-15 14:23:43
【问题描述】:

好的,所以我有这个像这样的小程序

  • BorderLayout.CENTER - (其中是 JPanel)
  • BorderLayout.EAST -(其中是一个新的 GridLayout (4,5)
  • BorderLayout.SOUTH - (其中是一个 TextArea)

无论如何,在小程序上,我必须将鼠标悬停在按钮上才能看到它们。我猜他们没有画在那里,但我将它们添加到 init() 方法中......所以我不知道我做错了什么以及为什么这样做。

setLayout( new BorderLayout() );
JPanel invOne = new JPanel(new GridLayout(5,4));
JPanel game = new JPanel();
add(invOne, BorderLayout.EAST);
add(game, BorderLayout.CENTER);
add(c, BorderLayout.SOUTH);

invOne.setBounds(416,0, 60, 28);

for (int i = 0,  j = 20;  i < 20;  i = i+1, j = j-1)  {
   invOne.add(new JButton("SLOT " + j));
   invOne.setBounds(32,32,100,100);
   invOne.setFocusable(false);
}

game.setBounds(0,0, 416, 288);
repaint();

【问题讨论】:

  • 再一次,你发布了一些随机的代码,这些代码并不能帮助我们解决问题。您过去曾被要求获得 SSCCE。了解如何创建并发布它,这样我们就不会浪费时间猜测您这次犯了什么愚蠢的错误。 Swing 教程中有大量示例。下载它们并测试它们并学习发布正确的问题。是的,本教程甚至还有一个简单的 JApplet 示例。
  • 看我的几个帖子,我加了SSCCE。
  • PS - 从技术上讲,我确实发布了一个正确的问题。

标签: java swing applet


【解决方案1】:

您想通过所有setBounds() 调用来完成什么?要么让pack() 根据里面的内容设置面板的大小,要么将边界once 设置为您希望看到该面板的位置。尤其是 32x32 像素大小的调用根本没有帮助。


编辑:

我发现了这些问题:

  • 正如另一位发帖人所提到的,您正在混合 Swing 和 AWT 组件。那效果不好。本质上,如果您使用的某些组件的开头有一个“J”,那么您将希望所有这些组件都使用“J”。 AWT 现在被认为是“老派”。这有点令人困惑,因为 GUI 中使用的一些类和组件没有 J。我想您需要仔细研究好的示例或查找类。

  • 由于某种原因,在我为 TextArea(现在称为 JTextArea)提供明确的行/列计数之前,小程序不想正常工作。我将new TextArea() 更改为new JTextArea(3,20)

  • 最大的问题可能是空的paint() 方法。我想知道小程序是如何显示任何东西的?您可以删除 paint() 方法;我通过调用super.paint() 修复了它。

  • 最后,类名(例如bl)应该以大写字符开头。 IdeOne 中的编译器为此向我抱怨。

Here's my fixed code.

黑客愉快!

【讨论】:

  • 好的,这里是代码 itSELF...dasdas.pastebin.com/ftwpx7rK 它只有 GUI...当我尝试编译时,我得到:C:\Documents and Settings\djasnowski\My Documents\bl.java :33: 找不到符号符号:方法 pack() 位置:class bl this.pack();
  • 我希望尽快修复它。我会回来报告的。
  • 我明白了。我将 Applet 更改为 JApple,但现在灰色的 jPanel 与绘制的图块(drawImage)图块重叠......
  • 更新了我的帖子。仔细阅读我的 cmets。
  • 您显示图像的组件是否足够大以显示整个图像?
【解决方案2】:

找到了one page (in german language),它描述了同样的问题:JButton 小部件仅在将鼠标悬停在它们上方后才会显示。

问题在于 AWT 和 Swing 组件/小部件混合在一起。如果是这种情况,我无法从您的代码片段中看到,但如果您有 java.awt.* 导入,请禁用它们,重构您的代码以仅使用 Swing 类,然后重试/希望最好。

另一个建议是明确地为每个按钮做一个setVisible(true),但提问者说,这对他的情况没有帮助。

【讨论】:

    【解决方案3】:

    在面板中添加所有组件后,您是否明确调用“pack()”(或“repaint()”)方法? 不调用这些方法可能会导致 Frames 出现图形问题...

    【讨论】:

    • 好的,我添加了代码。如您所见,我添加了 repaint() 但没有运气......(顺便说一下,这是一个小程序而不是框架)
    【解决方案4】:

    您在 Applet 中使用 Swing 组件。您应该使用 JApplet。只需将extends Applet 更改为extends JApplet

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 2013-03-19
      • 2016-12-18
      • 2012-10-01
      • 2016-02-21
      • 1970-01-01
      相关资源
      最近更新 更多