好的,所以我有这样的applet
无论如何,在小程序上,我必须通过按钮来查看它们。他们不在那里画画,但我在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();
答案 0 :(得分:2)
您想要通过所有setBounds()
来电完成什么?您可以让pack()
根据内部的内容设置面板的大小,或者将的边界设置为您想要查看该面板的位置。特别是尺寸为32x32像素的通话根本没有帮助。
编辑:
我发现了这些问题:
正如另一张海报所提到的,你正在混合使用Swing和AWT组件。这不太好用。基本上,如果您使用的某些组件在开头有一个“J”,那么您将希望为所有组件使用“J”。 AWT现在被认为是“老派”。这有点令人困惑,因为GUI中使用的某些类和组件没有J。我想你需要仔细研究好的例子或者查看课程。
出于某种原因,在我向TextArea(现在称为JTextArea)提供显式行/列计数之前,applet不希望正常工作。我将new TextArea()
更改为new JTextArea(3,20)
。
最大的问题可能是空paint()
方法。我想知道applet是如何显示的?您可以删除paint()
方法;我通过调用super.paint()
修正了它。
最后,类名(例如bl
)应以大写字符开头。 IdeOne中的编译器为此抱怨我。
快乐的黑客攻击!
答案 1 :(得分:2)
发现one page (in german language)描述了同样的问题:JButton小部件仅在将鼠标悬停在它们之后显示。
问题在于AWT和Swing组件/小部件混合在一起。我无法从您的代码片段中看到是否是这种情况,但如果您有java.awt.*
个导入,请禁用它们,重构您的代码以仅使用Swing类并再次尝试/希望最好。
另一个建议是明确地为每个按钮做setVisible(true)
,但提问者说,这对他的情况没有帮助。
答案 2 :(得分:1)
在面板中添加所有组件后,您是否明确调用“pack()”(或“repaint()”)方法? 不调用这些方法可能会导致Frames中出现图形问题...
答案 3 :(得分:1)
您正在Applet中使用Swing组件。您应该使用JApplet。只需将extends Applet
更改为extends JApplet
。