我正在做我的第一个Java项目,但我感到困惑。这将打开一个对话框,以获取0到255之间的数字,检查它是否为整数并且在范围内,然后使用int为图形小程序的背景制作灰色阴影。我有它应做的一切!但这并没有画小程序。在最后一次调用JOptionPane之后,程序终止。
import javax.swing.JApplet;
import javax.swing.JOptionPane;
import java.awt.Graphics;
import java.awt.Color;
@SuppressWarnings("serial")
public class DrawingShapes extends JApplet
{
private Shade shade = new Shade();
private void getColor()
{
int rgb = 0;
boolean useful = false;
String number = JOptionPane.showInputDialog("Make this easy for me.\n"
+ "Type an integer between 0 and 255");
{
try
{
rgb = Integer.parseInt(number);
if (rgb > 0 && rgb < 255)
{
useful = true;
shade.setColor(rgb);
}
else
{
useful = false;
number = JOptionPane.showInputDialog( null, "\"" + number + "\""
+ " is not between 0 and 255!\n"
+ "Lrn2 be doin' it right!" );
}
}
catch (NumberFormatException nfe)
{
number = JOptionPane.showInputDialog(null, "\"" + number + "\""
+ " is not an integer!\n"
+ "Lrn2 be doin' it right!");
}
}
if (useful)
{
JOptionPane.showMessageDialog(null, rgb + " will be the shade of gray.");
//WHEN this message is closed, the program seems to quit.
//System.exit(0);
}
}
public static void main(String[] args)
{
new DrawingShapes().getColor();
}
public class Shade
{
private int color;
public void setColor(int col)
{
color = col;
System.out.println("color: " + color);
System.out.println("col: " + col); //IT prints these lines....
}
public void paint (Graphics g) //Everything after this is sadly ignored.
{
int size = 500;
setSize(size, size);
int rgb = color;
Color gray = new Color(rgb,rgb,rgb);
setBackground(gray);
System.out.println(rgb + " This should be the third time");
g.drawOval(0, 0, size, size);
}
}
}
我无法弄清楚“公共空隙涂料(图形g)”出了什么问题,但它不会导致任何事情发生。我欢迎任何人的指正,我确定我犯了一个可笑的错误,因为我不太熟悉该语言...
最佳答案
这不是applet程序-是的,它扩展了JApplet,但是没有init
方法,而是有一个main
方法-在applet程序中不会调用该方法。请先执行JApplet Tutorial,然后再执行其他操作。
其他建议:
同样,您将需要适当的init()
覆盖。
不要直接在JApplet或任何顶级Window组件中绘制。
而是绘制JApplet中显示的JPanel的paintComponent(...)
方法。
不要在paint(...)
或paintComponent(...)
方法中设置背景色或更改GUI的状态。
您将要在super.paintComponent(...)
方法重写内调用paintComponent(...)
方法,通常这是方法的第一个方法调用。
另外,您还希望在同一站点上阅读Swing Graphics教程,因为它会对您有所帮助。
如果您希望创建一个桌面应用程序而不是applet,那么您的攻击将有所不同,因为您将没有init()
方法覆盖,您将需要一个main方法,并且将您的组件放入JFrame作为顶层窗口。
为了获得更好的帮助,请在您的问题中减少借口和道歉(我已删除了最多的),而着重于以尽可能清晰的方式提供有用的信息。我们对帮助您解决问题的兴趣不如对您的情况感兴趣,因此请帮助我们。
运气!