Прокрутка JFrame внутри JPanel - PullRequest
0 голосов
/ 30 октября 2019

Я использовал этот пример для рисования полигонов в качестве основы для создания своего собственного многоугольника, но сохранил самую важную часть:

public class Main extends JPanel {

public void paintComponent(Graphics g) {
    super.paintComponent(g);

    // polygon maker
}

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setTitle("DrawPoly");
    frame.setSize(1000, 1000);
    frame.setLocationRelativeTo(null);
    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
    Container contentPane = frame.getContentPane();
    contentPane.add(new Main());
    frame.show();
}
}

Я обнаружил, что если полигоны имеют отрицательную координатузначения, они просто исчезают с экрана, и я не могу видеть их целиком. Для этого я представляю прокрутку или масштабирование до JFrame, созданного внутри главной, или, возможно, до панели содержимого. Как реализовать простую прокрутку, используя связанный код в качестве базы?

1 Ответ

0 голосов
/ 31 октября 2019

Я обнаружил, что если полигоны имеют отрицательные значения координат, они просто исчезают с экрана

Нельзя использовать JScrollPane с отрицательными значениями.

Вместо этоговам нужно:

  1. Создать все полигоны, которые вы хотите нарисовать, и добавить их в ArrayList.
  2. Выполнить итерацию по ArrayList, чтобы найти наибольшее отрицательное значение x / y из всехПолигоны
  3. Если вы найдете отрицательную координату "x" или "y", то вы снова выполняете итерацию по списку ArrayList и вызываете метод translate(...) по абсолютному значению координаты x или y, чтобы сместить все многоугольники напанель, на которой все они будут видны
  4. Наконец, вы перебираете ArrayList и рисуете каждый многоугольник.

Примечание. в идеале вы должны создать полигоны и добавить, а затем создать ArrayList вне метода paintComponent (). Тогда сделай перевод. Поэтому теперь методу paintComponent () нужно только перебрать ArrayList и нарисовать их, не создавая и не переводя каждый раз, когда компонент должен перерисовать себя.

...