有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在检查和使用对话框输入时遇到问题

我刚刚开始学习java。它有点整洁,但我用一些我想象中非常简单的东西撞到了墙上。以下是我工作的一部分:

import javax.swing.JApplet;
import javax.swing.JOptionPane;
import java.awt.Graphics;
import java.awt.Color;

@SuppressWarnings("serial")
public class DrawingShapes extends JApplet
{
  public static void main( String [] args )
  {
    int rgb = 0;
    boolean useful = false;
    String number = JOptionPane.showInputDialog("Make this easy for me.\n"
    +"Type an integer between 0 and 255");
    do
    {
      try
      {
        rgb = Integer.parseInt( number );
        if (rgb > 0 && rgb < 255)
        {
          useful = true;
        }
        else
        {
          useful = false;
        }
      }
      catch ( NumberFormatException nfe )
      {
        number = JOptionPane.showInputDialog( null, "\"" + number + "\""
        + " is not an integer between 0 and 255!\n"
        + "Lrn2 be doin' it right!" );
      }
    }
    while ( !useful );
    JOptionPane.showMessageDialog( null, "The integer is " + rgb);
  }
}

其思想是对话框要求输入一个数字,如果不是数字,则显示错误并再次询问。事实上,现在效果很好。不过,我想要的是使用这个数字(rgb)来创建一个灰色阴影,这个阴影在这个类之外的小程序中使用

Color shade = new Color(rgb,rgb,rgb);

这不起作用,因为它无法从另一个类中读取变量。或者,也许可以,但我想我需要帮助弄清楚怎么做

简而言之,我需要读取输入,验证它,并且以后仍然能够将其用于其他用途。我离这个目标还有一点距离,所以我来这里寻求指导

编辑:丹的建议确实帮助了我处理变量,但现在我遇到了无法绘制图形的问题。小程序在对话框退出后立即关闭。所以我还是有点困惑。我只需要绘制一些简单的形状,使用输入对话框中的颜色作为背景。代码的后半部分如下所示:

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);
    }
    public void paint (Graphics canvas)
    {
      int col = color;
      Color gray = new Color(col,col,col);
      setBackground(gray)
      setSize(500, 500);  
      canvas.drawOval(0, 0, 500, 500);
      canvas.draw....[blablabla other shapes]
    }
  }

它完全跳过了绘画选项,除非我注释掉导致它的所有内容


共 (1) 个答案

  1. # 1 楼答案

    请参阅下面的代码以了解可能的解决方案。我创建了一个名为Shade的新类,它有一个私有字段,可以使用公共setter方法从另一个类(您的类或任何其他类)设置该字段

    请注意,我对您的类做了一点修改,因为将所有内容都放在主方法中是不好的,它是静态的

    import javax.swing.JApplet;
    import javax.swing.JOptionPane;
    
    public class DrawingShapes extends JApplet {
      private Shade shade = new Shade();
    
      private void readColor() {
        int rgb = 0;
        boolean useful = false;
        String number = JOptionPane.showInputDialog("Make this easy for me.\n" + "Type an integer between 0 and 255");
        do {
          try {
            rgb = Integer.parseInt(number);
            if (rgb > 0 && rgb < 255) {
              useful = true;
              shade.setColor(rgb);
            } else {
              useful = false;
            }
          } catch (NumberFormatException nfe) {
            number = JOptionPane.showInputDialog(null, "\"" + number + "\"" + " is not an integer between 0 and 255!\n"
                + "Lrn2 be doin' it right!");
          }
        } while (!useful);
        JOptionPane.showMessageDialog(null, "The integer is " + rgb);
      }
    
      public static void main(String[] args) {
        new DrawingShapes().readColor();
      }
    
      public class Shade {
        private int color;
    
        public void setColor(int col) {
          color = col;
          System.out.println("The chosen color shade is " + color);
        }
    
      }
    }