Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480

    Centrare JOptionPanel rispetto al Top Level Container

    Ciao a tutti,
    come posso centrare un JOptionPane rispetto al top levele container (JFrame) in modo tale che esso risulti centrato rispetto ad esso per una qualsiasi risoluzione di schermo impostata ?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    come posso centrare un JOptionPane rispetto al top levele container (JFrame) in modo tale che esso risulti centrato rispetto ad esso per una qualsiasi risoluzione di schermo impostata ?
    Tutti i showXxxxDialog ricevono un Component parentComponent.
    Il componente passato viene usato anche ai fini del centramento. Se passi es un JButton è lui il punto di riferimento.
    Ultima modifica di andbin; 23-04-2015 a 19:19
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Si infatti:
    se considero un JButton che fa questo:
    codice:
    private void infoActionPerformed(java.awt.event.ActionEvent evt) {                                     
            // Info iniziale
            try {
                ImageIcon icon = ImageLoader.loadIcon("logo.png");
                JOptionPane.showMessageDialog(this,....
    
    ....
    uso "this" perchè il metodo relativo al JButton si trova all'interno della classe del top level container.
    Ma se il jOptionPanel si trova in un'altra classe ? devo istanziare il top level container per fare in modo che sia rispetto ad esso ?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Ma se il jOptionPanel si trova in un'altra classe ? devo istanziare il top level container per fare in modo che sia rispetto ad esso ?
    Queste, come al solito, sono questioni di "design" delle classi. Se in un'altra classe hai bisogno di un reference e ... non ce l'hai, beh, devi cambiare un pochino il design.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Queste, come al solito, sono questioni di "design" delle classi. Se in un'altra classe hai bisogno di un reference e ... non ce l'hai, beh, devi cambiare un pochino il design.
    Qundi è come ho detto?
    Mi creo un reference nella classe e lo utilizzo come riferimento per centrare il JOptionPanel, passandolo come argomento, giusto?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Mi creo un reference nella classe e lo utilizzo come riferimento per centrare il JOptionPanel, passandolo come argomento, giusto?
    Mah .. il punto non è tanto passare un reference ad un'altra classe. Questo, in un modo o nell'altro generalmente si fa, insomma "tecnicamente" è fattibile. Le vere questioni sono a livello concettuale e appunto di "design" generale.

    Innanzitutto perché in un'altra classe hai bisogno di un reference ad un altro frame solo per aprire una message box? Quest'altra classe cosa è? È anch'essa un frame(/dialog) oppure un "bean" o una classe di utilità? Se è un'altra finestra, che relazione ha con quella che vuoi usare di riferimento per l'option pane?

    Le puoi sapere solo tu, che hai la visione completa della applicazione. Questi aspetti di design comunque non sono sempre "facili" e si acquisiscono con il tempo, studiando anche la OOP e i design pattern, sviluppando e anche ... sbagliando. Passare reference/valori di qua e di là a casaccio o peggio "aprire" l'accesso a campi interni o fare improbabili invocazioni in cascata tipo altroFrame.getPannelloX().getComponenteY().getXyz( ) e roba simile, generalmente non sono la soluzione e rischiano solo di ingarbugliare di più il design.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Mah .. il punto non è tanto passare un reference ad un'altra classe. Questo, in un modo o nell'altro generalmente si fa, insomma "tecnicamente" è fattibile. Le vere questioni sono a livello concettuale e appunto di "design" generale.

    Innanzitutto perché in un'altra classe hai bisogno di un reference ad un altro frame solo per aprire una message box? Quest'altra classe cosa è? È anch'essa un frame(/dialog) oppure un "bean" o una classe di utilità? Se è un'altra finestra, che relazione ha con quella che vuoi usare di riferimento per l'option pane?
    Ciao andbin, ho bisogno del reference al frame principale perchè la classe che ne ha bisogno, si occupa della procedura di ingresso dei dati da parte dell'utente. Non si tratta solo di una message box ma di una vera e propria interazione del software con l'utente per inserire i dati.

    Ma non ho ancora capito come fare...come faccio a referenziare un frame che è proprio il top level container ?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Ho fatto così. Ho passato il frame principale al metodo della classe che si occupa di ciò:
    codice:
    ProceduraInput.proceduraIngressi(continente, PVE.this);
    e poi:

    codice:
    ...
    public static void proceduraIngressi(String continent, JFrame rif) throws IOException, Exception {
    ...
    ...
    citta = JOptionPane.showInputDialog(rif,"Enter the name of the city");

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    codice:
    public static void proceduraIngressi(String continent, JFrame rif) throws IOException, Exception {
    ...
    ...
    citta = JOptionPane.showInputDialog(rif,"Enter the name of the city");
    Vedo che è public static ... quindi proprio solo una "utilità" richiamabile da qualunque parte. Cioè è qualcosa di abbastanza generico e non precisamente contestualizzato nell'intera applicazione. Però vedo anche che ha tipo di ritorno void e quindi ciò che chiede (quel citta) lo devi per forza mettere da qualche parte sicuramente altrettanto "static". E questo mi porta alla conclusione che il "design" generale potrebbe non essere il massimo ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.