为什么这个java小程序在绘制图形之前退出



我正在进行我的第一个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)"出了什么问题,但它不会导致任何事情发生。我欢迎任何人纠正,我确信我犯了一个可笑的错误,因为我对语言不太适应。。。

这不是一个小程序程序——是的,它扩展了JApplet,但没有init方法,而是有一个main方法——一个不会在小程序程序中调用的方法。在做任何其他事情之前,请先完成JApplet教程。

其他建议:

  • 同样,您需要一个适当的init()覆盖
  • 不要直接在JApplet或任何顶级Window组件中绘制
  • 相反,绘制JApplet中显示的JPanel的paintComponent(...)方法
  • 不要在paint(...)paintComponent(...)方法中设置背景颜色或更改GUI的状态
  • 您需要在paintComponent(...)方法重写中调用super.paintComponent(...)方法,通常这是方法的第一个方法调用
  • 此外,你还想在同一个网站上阅读Swing Graphics教程,因为它将帮助你很多
  • 如果你想创建一个桌面应用程序,而不是一个小程序,那么你的攻击将有点不同,因为你没有init()方法重写,你需要一个主方法,你将把你的组件放在一个JFrame中作为你的顶级窗口
  • 为了获得更好的帮助,在你的问题中少贴借口和道歉(我已经删除了大部分),而是专注于以尽可能清晰的方式提供有用的信息。我们对你的情况不感兴趣,就像我们对帮助解决你的问题感兴趣一样,所以请帮助我们帮助你

幸运!

最新更新