Libgdx ScrollPane – ¿No se desplaza?

Estoy haciendo un lobby en un juego multijugador, que puede tener cualquier número de jugadores en una mesa. Tengo el siguiente código:

camera = new OrthographicCamera(WIDTH,HEIGHT); camera.position.set(WIDTH/2,HEIGHT/2, 0); camera.update(); stage = new Stage(); Gdx.input.setInputProcessor(stage); stage.setCamera(camera); stage.setViewport(WIDTH,HEIGHT,false); ScrollPaneStyle paneStyle = new ScrollPaneStyle(); paneStyle.background = new TextureRegionDrawable(WizardsDuel.atlas.findRegion("cavebg")); paneStyle.vScrollKnob = new TextureRegionDrawable(WizardsDuel.atlas.findRegion("GUI/slidernob")); paneStyle.hScroll = paneStyle.hScrollKnob = paneStyle.vScroll = paneStyle.vScrollKnob; Table container = new Table(); table = new Table(); ScrollPane pane = new ScrollPane(table,paneStyle); container.add(pane).width(WIDTH).height(HEIGHT); container.row(); container.setBounds(0,0,WIDTH,HEIGHT); stage.addActor(container); font = new BitmapFont(); color = new Color(0,0,0,1); style = new TextButtonStyle(); style.font = font; style.up = new TextureRegionDrawable(WizardsDuel.atlas.findRegion("GUI/guibg")); style.fontColor = color; handler = new ChangeHandler(); ArrayList<User> users = FirebaseManager.lobbyUsers; for(int i = 0; i < users.size() || i < 100; i++){ TextButton tmp = new TextButton("",style); tmp.scale(2); //tmp.setText(users.get(i).name); tmp.setText(i+ " asdf"); tmp.addListener(handler); table.add(tmp).width(WIDTH/4f); if(i%2 == 1 && i > 0) table.row(); } 

A pesar de la forma en que la tabla se extiende claramente por debajo de la parte inferior de la pantalla (que debería ser la parte inferior del panel de desplazamiento), no hay barra de desplazamiento y hacer clic y arrastrar no hace nada.

Captura de pantalla: Introduzca aquí la descripción de la imagen

    Tal vez se olvide de hacer acto de la etapa en render (), añadir algo como:

     @Override public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); stage.act(Math.min(Gdx.graphics.getDeltaTime(), 1 / 30f)); stage.draw(); } 

    Usted realmente necesita dos cosas. Un contenedor exterior y un contenedor interior. Usted utiliza regularmente dos tablas para esto. Así que aquí hay un pequeño ejemplo de cómo utilizar el scrollPane. En realidad, sin estilo, pero debe dejar claro.

      this.table = new Table(); this.container = new Table(); scroll = new ScrollPane(table); container.add(scroll).width(500f).height(500f); container.row(); 

    La tabla es la tabla uno donde agregas las cosas que deberían ser desplazables. El contenedor es el exterior. Por lo tanto, puede agregar un título por encima de su scrollbox. La caja externa (recipiente) necesita un tamaño. De lo contrario no tendrá ninguna barra de desplazamiento o tal. Y necesitas la mesa interior.

    Ejemplo sencillo para agregar:

     style = new LabelStyle(font, Color.WHITE); label = new Label(null, style); table.add(label); table.row(); label.setAlignment(1); // align center 

    Darle más líneas que puede mostrar y tendrá un panel de desplazamiento. Else no hay ninguna barra de desplazamiento o tal.

    Todo en uno. Te has perdido el contenedor exterior, creo. Añadirlo y debería funcionar. No se olvide de establecer los tamaños.

    Mi problema era que no estaba recibiendo entrada. Mi No debería haber establecido el procesador de entrada en el constructor, porque, la pantalla anterior estaba estableciendo el procesador a nulo cuando estaba "oculto", por lo que cuando moví la línea al método de presentación LobbyScreen sucedió después de la pantalla anterior se ocultó , Y la entrada está ajustada correctamente.

    Después de que init el scrollpane que debe llamar a esta primera

      mScrollPane.layout(); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.