有 Java 编程相关的问题?

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

在java中,如何使用包含数组的参数调用图形方法?

在我的主方法中调用我的图形方法,以便它可以使用数组中的点绘制三角形,我遇到了一些挑战。当我不使用数组,只使用正则数时,这幅画效果很好,但该程序的思想是用户将值输入数组中以供使用。关于如何画三角形有什么建议吗?代码如下:(我有所有正确的进口)

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);
  }
}

共 (1) 个答案

  1. # 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方法中构建您的UI