J'ai un JFrame, dans ce JFrame j'ai un JPanel sur lequel je dessine, ce panneau peut être de n'importe quelle taille et je l'ai donc placé dans un JScrollpane pour me permettre de faire défiler lorsque le panneau est plus grand que la taille de l'écran de la fenêtre.
Malheureusement, ne fonctionne pas comme prévu:
Rendre la fenêtre JFrame plus petite que la taille JPanel n'affiche pas les barres de défilement
La taille de JScrollPane semble maintenant verrouillée à la taille du JPanel que je lui ai ajouté, où comme auparavant, il était redimensionné aux limites de sa fenêtre JFrame (il le fait toujours, mais seulement verticalement maintenant?!)
Le JPanel semble assumer la taille du JScrollpane indépendamment de ce que j'ai défini pour la taille préférée
Je suis sûr que je fais quelque chose de stupide, si quelqu'un pouvait souligner ce que je serais le plus reconnaissant!
JPanel _ImageCanvas = new JPanel(); // 'Canvas' to draw on
JScrollPane _ScrollPane = new JScrollPane();
// set size of 'canvas'
_ImageCanvas.setMinimumSize(new Dimension(100,100));
// Scroll pane smaller then the size of the canvas so we should get scroll bars right?
_ScrollPane.setMinimumSize(new Dimension(50,50));
// Add a border to 'canvas'
_ImageCanvas.setBorder(BorderFactory.createLineBorder(new Java.awt.Color(0, 0, 0)));
_ScrollPane.setViewportView(JPanel);
Merci beaucoup
David
setPreferredSize () est l'astuce, setMinimumSize () et même setSize () sur le composant seront ignorés par JScrollPane. Voici un exemple de travail utilisant une bordure rouge.
import Java.awt.*;
import javax.swing.*;
public class Scroller extends JFrame {
public Scroller() throws HeadlessException {
final JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createLineBorder(Color.red));
panel.setPreferredSize(new Dimension(800, 600));
final JScrollPane scroll = new JScrollPane(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
add(scroll, BorderLayout.CENTER);
setSize(300, 300);
setVisible(true);
}
public static void main(final String[] args) throws Exception {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Scroller().setVisible(true);
}
});
}
}
// suggest a size of 'canvas'
_ImageCanvas.setPreferredSize(new Dimension(100,100));
// Scroll pane smaller then the size of the canvas so we should get scroll bars right?
_ScrollPane.setPreferredSize(new Dimension(50,50));
// ..later
_Frame.pack();
Pour autant que je me souvienne, il y a 2 options:
Pour plus de détails, voir Javadoc: http://docs.Oracle.com/javase/7/docs/api/javax/swing/JScrollPane.html
Consultez l'interface Scrollable
, cela peut aider à résoudre les problèmes de dimensionnement.
Ces deux méthodes peuvent être utiles:
boolean getScrollableTracksViewportWidth();
boolean getScrollableTracksViewportHeight();