Domanda

Sto lavorando a un'applicazione Java legacy di grandi dimensioni per la quale un'importante funzionalità era il ridimensionamento automatico dei componenti della GUI in base alla risoluzione del monitor. Stiamo aggiornando la JVM su cui gira da 1.4.2 a 1.6 e ora il ridimensionamento è interrotto a causa di una modifica dell'implementazione di java.awt.Container.getPreferredSize ().

getPrefferedSize usato per restituire lo stesso oggetto che hai dato con setPreferredSize () (tutto vale anche per le dimensioni min / max), quindi ciò che faremmo sarebbe chiamare setPRefferedSize su ogni componente di ridimensionamento con una particolare sottoclasse di java.awt.Dimension , seguiremmo la gerarchia dei componenti e aggiorneremmo ogni componente di ridimensionamento ogni volta che la risoluzione cambiava.

Tuttavia in Java 1.6 getPreferredSize restituisce una copia dell'oggetto Dimension che gli è stato passato, quindi non è più il tipo giusto e nulla viene ridimensionato.

Ho hackerato insieme una soluzione abbastanza rapidamente sovrascrivendo la classe Component con la mia implementazione (grazie a JRE open source) posizionandola di fronte a JRE nel percorso della classe. Tuttavia questa soluzione non è chiaramente mantenibile.

Qualcun altro conosce un'altra soluzione a questo problema, come implementereste il ridimensionamento della GUI in Java 1.5 / 1.6?

È stato utile?

Soluzione

Sembra che stiano proteggendo meglio lo stato interno del componente in 1.6 rispetto a prima. Forse hanno eseguito FindBugs e riparato bug .

Quando ho letto per la prima volta questa domanda, ho pensato a Java 1.6u10. Include un nuovo aspetto chiamato Nimbus che supporta High DPI viene visualizzato utilizzando la grafica vettoriale per disegnare tutti i componenti dell'interfaccia.

Tuttavia, dopo aver letto la domanda un po 'più lentamente e aver provato a capire cosa stai dicendo, ti suggerirei di riscrivere l'interfaccia utente usando un gestore di layout che gestirà le dimensioni dei componenti interni per te. La mia sensazione è che gestire le dimensioni dei componenti come suggerisci non sia davvero una buona idea. Come jjnguy suggerisce, puoi usare GridBagLayout. Esistono diverse altre opzioni per i gestori layout. È stata pubblicata una domanda che fornisce un sondaggio sui layout manager preferiti da tutti, se stai cercando qualcosa di diverso da GridBagLayout.

Altri suggerimenti

La modifica dei gestori di layout sembra una buona soluzione, ma in questo caso richiederebbe una riprogettazione completa dell'interfaccia utente (che include migliaia di componenti), quindi questa non è davvero una soluzione pratica per questa applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top