JScrollPane ahora muestra su ventana gráfica
-
19-08-2019 - |
Pregunta
Estoy haciendo una aplicación con Java Swing y tengo un problema. He creado un Panel con pestañas, que debe contener un panel simple y un panel de desplazamiento. El panel simple funciona bien, pero en mi panel de desplazamiento solo puedo ver las barras de desplazamiento, pero no la ventana gráfica, mi código es el siguiente:
Panel de contenido
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);
}
}
Panel de desplazamiento
public class ScrollPanel extends JScrollPane {
public ScrollPanel(GraphPanel gp){
this.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
this.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.repaint();
}
}
GraphPanel
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();
}
Como no recibo ningún error o excepción, ahora estoy completamente perdido en qué enfoque tomar.
Solución
No debe subclasificar JScrollPane, no es necesario.
Pero si lo hace, no olvide agregar el componente al panel de desplazamiento.
En su subclase no está agregando GraphPanel al panel de desplazamiento .:
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();
}
}
Prueba:
public class ScrollPanel extends JScrollPane {
public ScrollPanel(GraphPanel gp){
super( gp );
.... etc ...
Y haga que GraphPanel extienda JComponent o JPanel