【问题标题】:Why does this java applet exit before drawing graphics?为什么这个java小程序在绘制图形之前就退出了?
【发布时间】:2012-08-27 19:37:21
【问题描述】:

我正在开发我的第一个 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);
    }
  }
}

我无法弄清楚“public void paint (Graphics g)”有什么问题,但它不会导致任何事情发生。我欢迎任何人的指正,我确定我犯了一个可笑的错误,因为我对这种语言不太满意......

【问题讨论】:

  • “处理我的第一个 java 项目 ..applet” 灾难食谱 - 成分:1 个新程序员,1 个小程序。说明:轻轻混合即可食用。
  • 此时最好编写命令行应用程序(或基于 JFrame 的应用程序 - 如果你有勇气的话)。

标签: java swing graphics draw joptionpane


【解决方案1】:

这不是一个applet 程序——是的,它扩展了JApplet,但是没有init 方法,而是你有一个main 方法——一个不会在applet 程序中调用的方法。请先通过JApplet Tutorial,然后再进行其他操作。

其他建议:

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

好运!

【讨论】:

  • 我感觉比一小时前的悲哀要少得多。谢谢指点!
猜你喜欢
  • 2020-08-03
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 2016-02-23
相关资源
最近更新 更多