JScrollPane и графика. Полоса прокрутки не работает - Java

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Я отрисовываю графические обьекты и вставляю их в JScrollPane. Но полосы прокрутки при этом не появляются. То есть то, что выходит за рамки JScrollPane, не показывается. Если вставляю что-нибудь из swing, например JLabel очень длинную, всё работает. Но как только что-то из графики, не идёт. Вот такой примерно код:
public class SelectionTask
{
   public void makeShape (Graphics g)
 {
     Graphics2D g2 = (Graphics2D)g;
     Line2D line2 = new Line2D.Double(300,230,1800, 230); // очень длинная полоса
      g2.draw(line2);
  }
}

public class ShapeExample extends JPanel 
{
  public void paintComponent(Graphics g) 
{    
    super.paintComponent(g);
    new SelectionTask(200, 100, 240, 121, 4).makeShape(g); 
  }
public static void main(String[] args) 
 {
    JFrame frame = new JFrame();   
    frame.setSize(500, 400);
    JScrollPane  pane = new JScrollPane(new ShapeExample());
    frame.getContentPane().add(pane);
    frame.setVisible(true);
  }
}
Всё изображается, (в данном случае длинная полоса) но прокрутка не работает. То есть невозможно всю полосу полностью просмотреть.

Решение задачи: «JScrollPane и графика. Полоса прокрутки не работает»

textual
Листинг программы
    private static class GraphPane extends JPanel {
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D)g;
            Line2D line2 = new Line2D.Double(300,230,1800, 230); // очень длинная полоса
            g2.draw(line2);
        }
    }
 
    public MyFrame() {
        JPanel ctx = new JPanel(new BorderLayout());
        this.setContentPane(ctx);
        GraphPane gp = new GraphPane();
        JScrollPane scroller = new JScrollPane(gp);
        ctx.add(scroller, BorderLayout.CENTER);
        //
        ctx.setPreferredSize(new Dimension(100, 100));
        gp.setPreferredSize(new Dimension(2000, 2000));
        //
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5