Ciao a tutti.
Ho sviluppato un'implementazione personalizzata di un PopupMenuListener, per rendere la tendina di una JComboBox abbastanza grande da visualizzare completamente ogni elemento (in pratica la barra di scorrimento orizzontale non deve essere visualizzata). Tutto funziona correttamente se l'applicazione viene avviata tramite un qualsiasi IDE, ma non funziona se viene avviata tramite Java Web Start. La dimensione della popup non viene modificata e se la larghezza non è sufficiente, appare la barra di scorrimento. Di seguito il codice che implementa il metodo popupMenuWillBecomeVisible:
Qualcuno sa dirmi se c'è una differenza, dal punto di vista delle GUI, tra l'avviare l'applicazione senza Java Web Start e l'avviarla con Java Web Start? Perché nel primo caso funziona correttamente e nel secondo no?? Sembra che nel secondo caso i metodi di set per le dimensioni chiamati sull'oggetto scroolPane non abbiano alcun effetto... Ho notato cmq che il metodo scrollPane.getPreferredSize().width restituisce valori diversi nei due casi. Quindi diciamo che "qualcosa" cambia sicuramente.Codice PHP:@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
JComboBox box = (JComboBox) e.getSource();
Object comp = box.getUI().getAccessibleChild(box, 0);
if (!(comp instanceof JPopupMenu)) {
return;
}
JList list = ((ComboPopup) comp).getList();
Dimension popupSize = list.getPreferredSize();
popupSize.width += 5;
if (popupSize.height > 500) { //show scrollbar only if the width is greater than 500
popupSize.height = 500;
popupSize.width += 15; // add padding for scrollbar
}
JComponent scrollPane = (JComponent) ((Container) comp).getComponent(0);
if (scrollPane.getPreferredSize().width < popupSize.width) {
scrollPane.setPreferredSize(popupSize);
scrollPane.setMaximumSize(popupSize);
scrollPane.setMinimumSize(popupSize);
}
}
Grazie.

Rispondi quotando