Tengo un pequeño problema al utilizar JScrollPane
en mi aplicación Java.Tamaño JScrollPane que contiene JPanel cuando aparecen barras de desplazamiento
Tengo un JScrollPane
que contiene un JPanel
. Este JPanel
se actualiza dinámicamente con botones (ordenados verticalmente) que pueden ser de cualquier ancho. El JPanel
ajusta automáticamente su ancho al componente más grande JButton
que se encuentra dentro.
Ahora, cuando aparece la barra de desplazamiento vertical, se quita algo de espacio en el lado derecho de mi JPanel
, lo que hace que los botones más grandes no aparezcan por completo. No quiero usar una barra de desplazamiento horizontal además de mostrar todo el botón.
¿Hay alguna manera de cambiar el tamaño de mi JPanel
cuando aparece una barra de desplazamiento, por lo que aparece muy bien al lado de mis botones? ¿O hay alguna otra forma de que la barra de desplazamiento aparezca junto a mi JPanel
?
¡Gracias de antemano!
EDIT: Aquí hay una demostración de mi problema. Cuando cambia el tamaño de la ventana a una altura menor, se cubre una pequeña parte de los botones del lado derecho.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.GridLayout;
/**
* @author Dylan Kiss
*/
public class Demo {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame myFrame = new JFrame("Demo");
JPanel sideBar = new JPanel();
JPanel centerPanel = new JPanel();
centerPanel.add(new JLabel("This is the center panel."));
JPanel buttonContainer = new JPanel();
JButton myButton = null;
for (int i = 0; i < 20; i++) {
buttonContainer.setLayout(new GridLayout(20, 1, 0, 0));
myButton = new JButton("This is my button nr. " + i);
buttonContainer.add(myButton);
}
sideBar.setLayout(new BorderLayout(0, 0));
JScrollPane scrollPane = new JScrollPane(buttonContainer);
sideBar.add(scrollPane);
myFrame.getContentPane().add(sideBar, BorderLayout.WEST);
myFrame.getContentPane().add(centerPanel, BorderLayout.CENTER);
myFrame.setLocationByPlatform(true);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.pack();
myFrame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
Podría dar SSCCE? – StanislavL
Es parte de un gran proyecto. Trataré de proporcionar una breve demostración del problema. – dylan202
@StanislavL para usuarios nuevos, supongo que es mejor vincular lo que es [SSCCE] (http://sscce.org/). :) – COD3BOY