【问题标题】:How do I call a graphics method with an parameter including an array in java?java - 如何使用包含数组的参数调用图形方法?
【发布时间】:2018-11-12 16:18:21
【问题描述】:

我在主要方法中调用图形方法时遇到了挑战,以便它可以使用数组中的点绘制三角形。当我不使用数组而只使用常规数字时,绘画工作得很好,但程序的想法是用户将值输入到要使用的数组中。关于如何制作三角形油漆的任何建议?这是代码:(我有所有正确的导入)

public class Summative extends JFrame{

  static int[] inpoot() {
    Scanner input = new Scanner(System.in);
    int[] numbers = new int[6];

    System.out.println("Please enter 3 sets of coordinates:");
    for (int i = 0; i < 6; i++) {
        numbers[i] = input.nextInt();
    }
    return numbers;
  }

  static void outpoot(int [] numbers) {

    double A = Math.sqrt (Math.pow ((numbers[4] - numbers[2]), 2) + Math.pow ((numbers[5] - numbers[3]), 2));
    double B = Math.sqrt (Math.pow ((numbers[4] - numbers[0]), 2) + Math.pow ((numbers[5] - numbers[1]), 2));
    double C = Math.sqrt (Math.pow ((numbers[2] - numbers[0]), 2) + Math.pow ((numbers[3] - numbers[1]), 2));

    double s = (A + B + C) / 2;
    double area = (Math.sqrt (s * (s - A) * (s - B) * (s - C)));
    System.out.println ("The area of the triangle entered is : " + area + " units squared.");
  }

  public static void main(String[] args) {
    int[] numbers = inpoot(); 
    outpoot(numbers); 
    JFrame frame = new JFrame("Triangle");
    frame.setVisible(true);
    frame.setSize(new Dimension(500, 500));

    JPanel panel = new myPanel();
    frame.add(panel);
    frame.validate(); 
    frame.repaint();
  }
}

这是图形类:

public class myPanel extends JPanel{
  public void paint (int [] numbers, Graphics g) {
                super.paint (g);
                g.setColor (Color.BLACK);
                int[] xTri = {numbers[0], numbers[2], numbers[4]};
                int[] yTri = {500 - numbers[1], 500 - numbers[3], 500 - numbers[5]};
                g.fillPolygon (xTri, yTri, 3);
  }
}

【问题讨论】:

  • 简短而长的答案是,你不知道。您将信息提供给myPanel,当myPanel 被绘制时,它会使用它
  • 那么,如果它在自己的类中,我应该在哪里或如何将数组的信息提供给 myPanel?
  • 在你的情况下,可能是myPanel的构造函数

标签: java arrays graphics parameters parameter-passing


【解决方案1】:

您需要提供一些方法将信息从您的main 方法传递给您的myPanel 类。在您的情况下,您可以简单地提供一个自定义构造函数,例如...

public class myPanel extends JPanel{

  private int[] xTri;
  private int[] yTri;

  public myPanel(int[] xTri, int[] yTri) {
      this.xTri = xTri;
      this.yTri = yTri;
  }

  public void paint (int [] numbers, Graphics g) {
                super.paint (g);
                g.setColor (Color.BLACK);
                g.fillPolygon (xTri, yTri, xTri.length);
  }
}

观察...

不要从 JFrame 扩展,反正你是在创建一个新实例,这只会混淆问题

由于 Swing 的工作方式,您需要确保在事件调度线程的上下文中启动 UI。因此,在您的主要方法中,您应该使用...

EventQueue.invokeLater(new Runnable() {
    @Override
    public void run() {
        // Your UI code here
    }
});

并在run 方法中构建您的用户界面

【讨论】:

    猜你喜欢
    • 2014-01-31
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 2016-03-08
    • 2018-10-14
    • 1970-01-01
    相关资源
    最近更新 更多