Visualizzazione dei risultati da 1 a 9 su 9

Discussione: JAVA: cell size jtable

  1. #1

    JAVA: cell size jtable

    Buongiorno

    riuscite ad aiutarmi sulle jxtable?

    vorrei personalizzare la dimensione delle colonne e ho utilizzato :
    table.getColumnModel().getColumn(0).setPreferredWi dth(100);

    fin che testo il tutto sul mio pc di sviluppo nessun problema, appena installo l'applicazione su un pc con 22'' la jtable non viene riempita alla stessa maniera nello jscrollpane e si vede un buco antiestetico alla fine.

    Qualcuno sa dirmi come rendere il codice "universale"?

    Grazie in anticipo
    http://www.econorma.com

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    1) Che roba è JXTable?
    2) Che tipo di ridimensionamento hai dato alla tabella (io conosco solo JTable e gli si può dire se mantenere le dimensioni prefissate o spalmare automaticamente sulla dimensione reale, in proporzione)
    3) Che roba è un buco antiestetico?

    C'è da dire che, generalmente, se si vuole mantenere la coerenza di visualizzazione su sistemi diversi, si devono usare i LayoutManager nel modo corretto. Se non usi i LayoutManager sei tu che devi farti carico di tutto il lavoro di adattamento. Ma questo non lo sappiamo, perchè non l'hai specificato.


    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

  3. #3

    thank for your reply

    la jxtable è una jtable piu' carina esteticamente...ma funziona alla stessa maniere della jtable.....l'ho importata cosi:

    import org.jdesktop.swingx.JXTable;

    Per settare le size delle colonne ho prima impostato ad OFF il resize

    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    table.getColumnModel().getColumn(0).setPreferredWi dth(100);

    e cosi' via per tutte le colonne.

    ho provato ad usare anche:

    table.getColumnModel().getColumn(0).setMinWidth(10 0);
    table.getColumnModel().getColumn(0).setMaxWidth(10 0);

    Il mio problema è che quando lancio il pgm sul mio pc 15" lo schermo viene riempito completamente con tutte le colonne, mentre su un pc 22" mi rimane un buco sulla parte destra.
    Speravo di allegare degli screenshots, ma provato e riprovato...niente...



    Ciao e grazie man
    http://www.econorma.com

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Ma infatti, fa esattamente quello che gli hai chiesto di fare:

    codice:
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    Questa riga dice alla JTable di non adattare le colonne alla dimensione della JTable, ma di mantenere le dimensioni che vai ad impostare (fisse in pixel!).

    Chiaramente, su un monitor 15 pollici la JTable avrà una dimensione, su un monitor 17 pollici ne avrà un'altra, su un monitor 22 pollici ne avrà un'altra ancora (a seconda della dimensione del contenitore dove c'è la JTable). E se tu gli dici di non ridimensionare lei non ridimensiona e la parte a destra rimarrà vuota.

    Ma questo è il comportamento che tu hai detto alla JTable di mantenere.


    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

    Quindi...

    Quindi "lui" ha sempre ragione allora....

    Ok grazie per la spiegazione boss, ma come potrei fare a fillare l'ultima colonna in modo che si adatti al size dello schermo?
    http://www.econorma.com

  6. #6

    toc toc

    ti spiego la mia esigenza e vediamo un po' se hai ancora la pazienza di rispondermi...

    in una jtable ci piazza come ultima colonna un JBUTTON, allora ho tolto il resize con OFF e mi son "disegnato" la dimensione di ogni colonna. Perfetto, funziona ho detto...ho impostato io i pixel a mano e le colonne le vedo che arrivano fino alla fine del frame con la bella scrollpane.
    Quando passo sul pc del collega appunto che ha un video ben piu' grande chiaramente la jtable si ferma prima della fine del frame.

    Potresti consigliarmi come risolvere al meglio il problema?

    Grazie
    http://www.econorma.com

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non credo che la cosa sia così semplice. JTable ha, sostanzialmente, due comportamenti: auto-resize (ridimensiona tutte le colonne, mantenendo le proporzioni) oppure no-auto-resize (JTable non ridimensiona nulla). Non entro nel merito della possibilità di ridimensionamento manuale dell'utente.

    Quello che chiedi di fare tu è un misto tra i due: non fare il resize per tutte le colonne tranne l'ultima, che deve estendersi.

    Questo comportamento dovrai definirlo tu a mano, andando ad aggiungere un listener al contenitore della JTable (immagino uno JScrollPane) in modo che venga notificato quando la finestra viene ridimensionata. Così, di primo acchitto, aggiungerei un ComponentListener che intercetta l'evento componentResized e modifica la dimensione dell'ultima colonna di conseguenza. Proverei con qualcosa del genere (non l'ho provato, l'ho scritto di getto nel forum):

    codice:
    class JTableResizer extends ComponentAdapter {
       private int initialWidth = 0;
       private JTable refTable;
    
       public JTableResizer(JTable refTable, int initialWidth) {
          this.refTable = refTable;
          this.initialWidth = initialWidth;
       }
       
       @Override
       public void componentResized(ComponentEvent ce) {
          Component src = ce.getSource();
          int deltaWidth = src.getSize().width - initialWidth;
          int actualWidth = refTable.getColumn( ultima colonna ).getWidth();
          actualWidth += deltaWidth;
          refTable.getColumn( ultima colonna ).setWidth( actualWidth );
       }
    }
    
    ...
    
    // Nel punto in cui crei la JTable e il JScrollPane:
    JTable tuaTabella = new JTable( ... );
    JScrollPane jsp = new JScrollPane( tuaTabella );
    ...
    add( jsp );
    ...
    jsp.addComponentListener( new JTableResizer(tuaTabella, jsp.getSize().width) );
    Qualcosa del genere, insomma. Devi riuscire ad ottenere la dimensione iniziale del contenitore (quella in cui la tua ultima colonna coincide perfettamente con la dimensione della tabella) in modo da passarla al resizer (che deve sapere qual è il punto di partenza da cui decidere se aumentare o diminuire la dimensione dell'ultima colonna).


    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

  8. #8

    eccomi...

    Grazie mille per la risposta Lele, adesso che son finalmente tornato in uff ci provo poi vediamo

    se riesco a venire ad un risultato soddisfacente.

    Ciao

    http://www.econorma.com

  9. #9

    allora...

    ho risolto nella maniera piu' banale:


    non ho piu' messo ad OFF l'autoresize e ho impostato il max width delle celle contente i jButton


    tabellaProve.getColumnExt(ProveModel.P_EXEC_ESPORT A_EXCEL).setMaxWidth(80);
    tabellaProve.getColumnExt(ProveModel.P_EXEC_REPORT ).setMaxWidth(80);


    Grazie mille per l'aiuto anyway
    http://www.econorma.com

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.