Je suis un débutant Java (1 mois d'expérience) mais je l'aime tellement loin!
Je dois implémenter une fonctionnalité sur une application de planification que je n'ai pas créée, je dois faire en sorte que le panneau contenant les jours reste fixe pendant le défilement (en-têtes de type Excel).Comment garder un JPanel fixé lors du défilement dans un JScrollPane en Java?
Alors que la recherche de réponses, je trouve la plupart des méthodes utilisant JTable
mais le problème est que je n'utilise que JPanel
ou MainPanel
, qui s'étend JPanel
, contenue dans le WindowPanel
(JPanel
) avec TopPanel
(JPanel
) (ne montrant pas dans l'image qui est déjà réparé). J'utilise la méthode setColumnHeaderView()
qui semble être la seule à montrer des résultats.
//MainWindow
MainPanel mainPanel = new MainPanel(model);
mainPanel.init(); //fill the mainPanel
windowPanel.add(mainPanel);
JViewport blabla = new JViewport();
blabla.setPreferredSize(mainPanel.getPreferredSize());
blabla.setView(mainPanel);
//JViewport blabla2 = new JViewport();
//blabla2.setPreferredSize(windowPanel.getPreferredSize());
scroll = new JScrollPane(windowPanel);
scroll.setColumnHeaderView(blabla);
getContentPane().add(scroll);
this.addMouseListener(new FocusSetterListener());
this.pack();
this.setVisible(true);
Avec cette méthode, je reçois l'en-tête à droite, mais pas scrollbar, et le panneau ci-dessous (ici le WindowPanel
) reste juste bleu.
En fait, à la place du WindowPanel
je dois afficher le rempli MainPanel
, qui travaille quand je fais ça:
//MainWindow
MainPanel mainPanel = new MainPanel(model);
mainPanel.init(); //fill the mainPanel
windowPanel.add(mainPanel);
JViewport blabla = new JViewport();
blabla.setPreferredSize(mainPanel.getPreferredSize());
blabla.setView(mainPanel);
scroll = new JScrollPane(mainPanel);
scroll.setColumnHeaderView(blabla);
getContentPane().add(scroll);
this.addMouseListener(new FocusSetterListener());
this.pack();
this.setVisible(true);
Mais l'en-tête reste bleu et le Days en-tête est pas fixe, c'est juste en dessous de l'en-tête mais tout le reste se charge bien y compris la barre de défilement (pas si pertinent donc pas dans les images). Pour plus d'informations, le panneau ci-dessous est formé de customPanels appelé cellPanels:
Je pense que je suis proche de mon but, mais je testé beaucoup de choses et rien entièrement travaillé. Je cherche quelqu'un pour m'expliquer ce que je fais mal et m'aider à le réparer.
Merci pour votre temps!