Как мне вызвать графический метод с параметром, включающим массив в Java? - PullRequest
0 голосов
/ 03 июня 2018

У меня проблемы с вызовом моего графического метода в моем основном методе, чтобы он мог рисовать треугольник, используя точки из массива.Когда я не использую массив и просто использую обычные числа, рисование работает отлично, но идея программы заключается в том, что пользователь вводит значения в используемый массив.Любые предложения о том, как сделать краску треугольника?Вот код: (у меня есть все необходимые импорты)

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 Ответ

0 голосов
/ 03 июня 2018

Вам необходимо предоставить некоторые средства для передачи информации от вашего метода 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, вам необходимо убедиться, что вы запускаете свой пользовательский интерфейс в контексте потока диспетчеризации событий.Итак, в вашем основном методе вы должны использовать ...

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

и создать свой пользовательский интерфейс в методе run

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...