Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    JTable e setLayout(null)

    Il mio problema è che vorrei posizionare gli elementi manualmente (tramite .setLocation(x,y))
    in un pannello in cui è presente anche una tabella. (una tabella, una label, un pulsante, un campo di testo).
    Usando il FlowLayout() i componenti sono troppo stretti tra di loro, il BorderLayout() non va bene, perchè da quel che ho capito in ogni sezione(N,S,E,O) può starci un solo componente.
    Il problema è che usando setLayout(null), e table.setVisible(true),table.setLocation(x,y)
    non mi mostra la tabella. (col FlowLayout() è visibile invece, sta al centro ma è tutto troppo schiacciato).
    Perchè non riesco a renderla visibile? Di solito col setLocation e setSize funzionava tutto

    grazie

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: JTable e setLayout(null)

    Originariamente inviato da Jimmy5nomana
    Il mio problema è che vorrei posizionare gli elementi manualmente (tramite .setLocation(x,y))
    in un pannello in cui è presente anche una tabella. (una tabella, una label, un pulsante, un campo di testo).
    Usando il FlowLayout() i componenti sono troppo stretti tra di loro, il BorderLayout() non va bene, perchè da quel che ho capito in ogni sezione(N,S,E,O) può starci un solo componente.
    I layout manager vanno incapsulati per ottenere dei risultati. Prova a fare un disegno di come hai pensato la tua interfaccia e ragiona su come "incastrare" i layout manager per ottenere quell'effetto.

    L'utilizzo delle coordinate assolute è da sconsigliare in quanto delega completamente al programmatore la gestione di eventuali resize della finestra e dei componenti stessi.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    La finestra non si può allargare, si può allungare ed è presentare uno scrollbar che contiene la tabella.
    Scusa tu dici di separare l'area del pannello in due parti (sono abbastanza ignorante su questa parte) magari con dei box (mi ricordo qualcosa del genere), e ad ogni box assegnare un Layout?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326

    Re: JTable e setLayout(null)

    Originariamente inviato da Jimmy5nomana
    il BorderLayout() non va bene, perchè da quel che ho capito in ogni sezione(N,S,E,O) può starci un solo componente.
    Il quale potrebbe essere benissimo un pannello (un componente) con il suo bel LayoutManager e con all'interno una miriade di altri componenti...

    (...le scatole cinesi... è così che funziona...)

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    ok vediamo un secondo di parlare di pratica... se io facessi



    e poi per settare i singoli componenti, dentro al pannello:
    Codice PHP:
              setLayout(new FlowLayout());
                     
              
              
    add(scroll, new FlowLayout(FlowLayout.LEFT));
              
    add(testoBorderLayout.NORTH);
              
    add(cerca,BorderLayout.CENTER); 
    così? ma come ho detto non ho spazio in mezzo e mi viene tutto attaccato. io voglio fare (con spaziature a mia discrezione e non guidate dal layout.. per questo mi serviva sapere come visualizzare la tabella con un layout(null) visto che il frame non è ridimensionabile )

    Codice PHP:
    ------------------------------------------------------------------------


                                                                     
    Cerca Informazioni (Jlabel)

                                                                     
    campo di testo(Jtext)

                                                                     
    cerca (Jbutton)          
          
    tabella_tabella_tabella_tabella                             








    ------------------------------------------------------------------------ 

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    No.
    Il LayoutManager si setta una sola volta sul contenitore... quello è e quello rimane.
    Il secondo parametro del metodo add() di un contenitore indica (ove consentito/necessario) i constraint, ovvero le regole previste dal LayoutManager su come posizionare il componente.

    Quindi, se tu setti un FlowLayout su un contenitore, il secondo parametro non serve a nulla: FlowLayout sa già come deve sistemare i componenti.

    Diverso è se setti un BorderLayout: il secondo parametro indica dove posizionare l'elemento (NORTH, SOUTH, WEST, EAST, CENTER).

    Quindi, per la finestra principale direi che un BorderLayout è la scelta ottimale, in quanto suddivide l'area in 5 (o meno) spazi. Generalmente c'è l'area centrale (quella che occupa più spazio e che può eventualmente estendersi) + le (eventuali) 4 zone laterali.

    Direi che la tabella andrebbe posizionata nel CENTER del BorderLayout (parlo di tabella, ma solitamente, si parla di un JScrollPane che contiene la tabella, altrimenti non avrai né le intestazioni di colonna, né la possibilità di scrollare tale tabella).

    Nella zona EAST della finestra, metterei un pannello con FlowLayout CENTER oppure con un BoxLayout che si estende secondo l'asse Y.

    codice:
    // La tua finestra
    Container c = getContentPane();
    c.setLayout( new BorderLayout() );
    
    // Aggiungo i due elementi: la tabella ed il pannello con il pulsante, la textfield e la label
    c.add(tuaTabella, BorderLayout.CENTER);
    c.add(tuoPannello, BorderLayout.EAST);
    Ora veniamo al pannello:
    codice:
    // Nel tuo pannello
    setLayout( new FlowLayout(FlowLayout.LEFT, 2, 2) );   // I valori sono a caso, guarda la doc
    
    // Dimensiono il pannello
    // Assegno una larghezza pari a quella che voglio e l'altezza pari a quella della finestra
    setPreferredSize( new Dimension(larghezza, altezza) );
    
    // Dimensiono i componenti in modo che ce ne stiano solo uno per riga
    // Supponiamo che la larghezza sia 100
    tuaLabel.setPreferredSize( new Dimension(80, 25) );
    tuaTextField.setPreferredSize( new Dimension(80, 25) );
    tuoPulsante.setPreferredSize( new Dimension(80, 30) );
    
    // Aggiungo la label
    add( tuaLabel );
    
    // Aggiungo la TextField
    add( tuaTextField );
    
    // Aggiungo il pulsante
    add( tuoPulsante );
    Il FlowLayout allinea i componenti sulla sinistra (gli ho detto FlowLayout.LEFT). Quando non ce ne stanno più, li porta a capo... io ho fatto in modo che ciascun componente occupi quasi tutta la riga, così il FlowLayout sarà costretto a mandarli tutti a capo... ho costruito così 3 righe.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Ma non c'è proprio un modo per usare il Layout(null) con una JTable ?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da Jimmy5nomana
    Ma non c'è proprio un modo per usare il Layout(null) con una JTable ?
    Togliere di mezzo il LayoutManager lo puoi fare con qualunque cosa... quello che ti stiamo dicendo è che non è la via migliore: poco importa che la tua finestra sia o non sia ridimensionabile... le cose cambiano anche solo passando da WinXP a Win 7 per via dei diversi desktop manager che i sistemi usano.

    Nessuno ti vieta di toglierlo: ma non credere di fare "meno fatica", al contrario... ne fai il doppio (devi dimensionare e posizionare ogni singolo componente) per poi scoprire che si vede bene solo sul tuo PC, con la tua versione di sistema operativo, la tua risoluzione video, ecc. e che appena cambi PC tutto si sfasa.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    mmh ok va bene mi hai convinto, grazie

  10. #10
    Ultimo problema (con questo Border Layout): ora la tabella è schiacciata tra i bordi della finestra, cioè occupa tutto lo spazio.. se io volessi aggiungerci un bordo (un emptyborder, così in quegli x pixel si intravede lo sfondo e non è attaccato al bordo della finestra), come?
    Ho provato qualcosa ma.. non mi si vede lo sfondo che ho settato


    Codice PHP:
    scroll.setBorder(BorderFactory.createEmptyBorder10201020 )); 
    nelle zone dove ci doveva essere lo sfondo, ci rimane il colore bianchino della tabella


    EDIT:: RISOLTO
    Codice PHP:
    scroll.setBorder(BorderFactory.createLineBorder(new Color(210,220,230), 10)); 
    se la tabella è vuota è normale non si veda la scrollbar?

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.