Вопрос

Я создаю приложение с Java Swing, и у меня возникла проблема.Я создал панель с вкладками, которая должна содержать простую панель и панель прокрутки.Простая панель работает нормально, но на моей панели прокрутки я вижу только полосы прокрутки, но не область просмотра, мой код выглядит следующим образом:

Панель содержимого

public class ContentPane extends JTabbedPane {
    private InfoPanel ip;
    ScrollPanel sp;

    public InfoPanel getIp() {
        return ip;
    }

    public ContentPane(GraphPanel gp) {
        this.sp = new ScrollPanel(gp);
        this.sp.setViewportView(gp);

        this.addTab("Graph", this.sp);
        this.ip = new InfoPanel(gp);
        this.addTab("Info", ip);
    }
}

Панель прокрутки

public class ScrollPanel extends JScrollPane {
    public ScrollPanel(GraphPanel gp){
        this.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        this.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        this.repaint();
    }
}

Графическая панель

public GraphPanel(StatusBar sb) {
    this.sb = sb;
    zoomLevel = 5;
    sm = new Simulation();
    mh = new MouseHandler(this, sm);
    this.addMouseListener(mh);
    this.setBackground(new Color(240, 165, 98));        
    this.repaint();
}

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

Это было полезно?

Решение

Вы не должны создавать подкласс JScrollPane, в этом нет необходимости.

Но если вы это сделаете, не забудьте добавить компонент в область прокрутки.

В вашем подклассе вы являетесь не добавление графической панели на панель прокрутки.:

public class ScrollPanel extends JScrollPane {
    public ScrollPanel(GraphPanel gp){

         // ::::  HERE ::: you are not doing anything with gp 
         // like this.setViewPort( gp ) or something like that

        this.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        this.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        this.repaint();
    }
}

Попробуй:

public class ScrollPanel extends JScrollPane {
    public ScrollPanel(GraphPanel gp){
        super( gp );
        .... etc ...            

И пусть GraphPanel расширит JComponent или JPanel

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top