Java/Swing: невозможно заставить JScrollPane отображать весь элементJAVA

Программисты JAVA общаются здесь
Anonymous
Java/Swing: невозможно заставить JScrollPane отображать весь элемент

Сообщение Anonymous »

Цель состоит в том, чтобы нарисовать несколько кругов (каждый из которых представляет собой отдельный экземпляр JComponent) на JPanel и иметь возможность прокручивать их достаточно далеко в любом направлении, чтобы увидеть их все.
Вот «основной» код:

Код: Выделить всё

JFrame frame = new JFrame();
JPanel panel = new JPanel(new BorderLayout());
panel.add(new Circle(-100, 0, 200));
panel.add(new Circle(-25, 0, 650));
JScrollPane scrollPane = new JScrollPane (panel);
frame.add(scrollPane);
frame.setSize(600, 600);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
Вот класс Circle:

Код: Выделить всё

public class Circle extends JComponent {
private int x;
private int y;
private int width;

public Circle(int x, int y, int width) {
this.x = x;
this.y = y;
this.width = width;
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillOval(this.x, this.y, this.width, this.width);
}
}
Пара проблем, которые я не могу решить:
  • JPanel не показывает круги, если для макета установлено значение BorderLayout; когда для него установлено значение BorderLayout, он показывает только последний добавленный к нему круг.
  • Я попробовал использовать JScrollPane, чтобы сделать JPanel прокручиваемым. Однако, когда я рисую круг большого размера, чтобы проверить, работает ли он, JScrollPane не показывает полосу прокрутки, чтобы увидеть все это. (См. изображение ниже)
Не прокручивается, не видно всего компонента.
Надеюсь, это наполовину понятно, Я очень новичок в Swing. Любые идеи будут очень оценены!

Подробнее здесь: https://stackoverflow.com/questions/784 ... re-element

Вернуться в «JAVA»