我不知道为什么但没有出现?
我想有一个房子的小程序。
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.*;
public class color extends JApplet
{
public void init()
{
addMouseListener(new MyMouseListener());
getContentPane().setBackground(Color.white);
}
public class MyMouseListener implements MouseListener
{
public void mouseClicked(MouseEvent e)
{
int x = e.getX();
int y = e.getY();
boolean closeDoors = true;
if(x>330 && x<280 && y>20 && y<20)
{
closeDoors = false;
repaint();
}
}
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
}
public void paint ( Graphics g, boolean closeDoors)
{
super.paint (g);
do
{
g.drawLine (35, 50, 570, 50);
g.drawLine (35, 50, 250, 0);
g.drawLine (250, 0, 570, 50);
g.drawRect (50, 50, 500, 350);
g.fillRect (100, 75, 80, 80);
g.fillRect (400, 75, 80, 80);
g.fillRect (240, 200, 125, 200);
}
while (closeDoors = true);
if (closeDoors = false);
{
g.drawLine (35, 50, 570, 50);
g.drawLine (35, 50, 250, 0);
g.drawLine (250, 0, 570, 50);
g.drawLine (180, 120, 100, 120);
g.drawLine (400, 120, 480, 120);
g.drawLine (140, 75, 140, 160);
g.drawLine (450, 75, 450, 160);
g.drawRect (50, 50, 500, 350);
g.drawRect (100, 75, 80, 80);
g.drawRect (400, 75, 80, 80);
g.drawRect (240, 200, 125, 200);
g.drawOval (330,280, 20, 20);
}
}
}
答案 0 :(得分:3)
您可能正在paint
方法中循环。这似乎是一个无限循环。
do
{
g.drawLine (35, 50, 570, 50);
g.drawLine (35, 50, 250, 0);
g.drawLine (250, 0, 570, 50);
g.drawRect (50, 50, 500, 350);
g.fillRect (100, 75, 80, 80);
g.fillRect (400, 75, 80, 80);
g.fillRect (240, 200, 125, 200);
} while (closeDoors = true);
我会将其替换为:
if (closeDoors = true)
{
g.drawLine (35, 50, 570, 50);
g.drawLine (35, 50, 250, 0);
g.drawLine (250, 0, 570, 50);
g.drawRect (50, 50, 500, 350);
g.fillRect (100, 75, 80, 80);
g.fillRect (400, 75, 80, 80);
g.fillRect (240, 200, 125, 200);
}
答案 1 :(得分:2)
我会尽力帮助你走上正轨: - )
您可能已经知道这一点,但如果您不使用IDE,我建议您使用appletviewer来开发applet,而不是使用浏览器。只是值得深思: - )
首先,Toader Mihai Claudiu的建议是正确的。改变
do
{
g.drawLine (35, 50, 570, 50);
g.drawLine (35, 50, 250, 0);
g.drawLine (250, 0, 570, 50);
g.drawRect (50, 50, 500, 350);
g.fillRect (100, 75, 80, 80);
g.fillRect (400, 75, 80, 80);
g.fillRect (240, 200, 125, 200);
}
while (closeDoors = true);
if (closeDoors = false);
{
到
if (closeDoors)
{
g.drawLine (35, 50, 570, 50);
g.drawLine (35, 50, 250, 0);
g.drawLine (250, 0, 570, 50);
g.drawRect (50, 50, 500, 350);
g.fillRect (100, 75, 80, 80);
g.fillRect (400, 75, 80, 80);
g.fillRect (240, 200, 125, 200);
}
else
{
否则,只要closeDoors为真,你就会画画。你只需要画一次。 Java会要求您在必要时再次绘制(例如,当您调用repaint()时)。
另外,将closeDoors
设置为成员变量。换句话说,有:
public class color extends JApplet
{
public boolean closeDoors = false;
当你在点击监听器中切换closeDoors的值时,可以将其简化为:
int x = e.getX();
int y = e.getY();
if(x>330 && x<280 && y>20 && y<20)
{
closeDoors = !closeDoors;
repaint();
}
当您单击特定区域时,将反转closeDoors的值。换句话说,如果closeDoors
为true
,则会将其设置为false
,反之亦然。
请注意,您的代码if(x>330 && x<280 && y>20 && y<20)
可能完全不起作用,因为y
同时不能大于20且小于20。我会让你玩弄它找出有效的方法: - )。
希望这有帮助。
只是一个小细节,但您可能应该调用您的班级Color
而不是color
来关注Java standard naming convention,或者如果您不想与其发生冲突,请将其称为其他内容java.awt.Color
答案 2 :(得分:1)
通常,在Swing中,您永远不应该覆盖paint()
方法,而是覆盖paintComponent
。 (我不确定JApplet,不过 - 我会在applet内部的JPanel上绘制,而不是applet本身。)
在你的绘画方法中没有无限循环 - 它应该快速返回,而不是永远工作,正如Toader已经说过的那样。
但是,正如你在评论中所写的那样,这不是你的问题:
我让Applet没有初始化
在问题中添加这样的(重要!)信息(出于某种原因,它有一个编辑链接,你知道)。
您的浏览器应该在某处使用Java控制台,使用它,并查看是否有错误消息。将此(包括堆栈跟踪,如果有的话)复制到您的问题中。这可以帮助您。
(如果您在Linux上使用OpenJDK和icedTea-Plugin,请查看~/.icedteaplugin/java.stderr
和~/.icedteaplugin/java.stdout
,但他们还没有实现Java控制台。)
答案 3 :(得分:1)
还有一个问题。您正在超载,实际上并未覆盖paint
(或paintComponent
)。添加@Override
,编译器会告诉您错误:
@Override public void paint(Graphics g, boolean closeDoors) { // wont compile
好像你需要一个调试课程。至少放入一些System.err.println
并检查Java控制台。