2010-03-16 20 views
33

C'è un modo per abilitare la barra di scorrimento orizzontale quando necessario?JTable con barra di scorrimento orizzontale

La situazione era tale: ho uno JTable, una delle celle, memorizzato una lunga quantità di dati. Quindi, ho bisogno di avere una barra di scorrimento orizzontale.

Qualcuno ha idea al riguardo?

risposta

91

In primo luogo, aggiungere il JTable all'interno di un JScrollPane e impostare i criteri per l'esistenza di barre di scorrimento:

new JScrollPane(myTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 

Poi, indicano che il vostro JTable non deve auto-ridimensionare le colonne impostando la modalità AUTO_RESIZE_OFF:

myJTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
+0

esattamente ....... –

+0

In Netbeans, JScrollPane con componenti iniziali JTable sono stati impostati in un metodo che non può essere modificato. Qualche idea per risolvere questo? Ho provato a inserire il metodo, tuttavia, la tabella è scomparsa dopo aver inserito il codice sopra un gestore di pulsanti a scopo di test. –

+0

@MrCooL potresti modificare il tuo post originale per mostrare il tuo codice Java? – romaintaz

9

Impostare il AutoResizeMode-OFF nelle proprietà del jTable

3

Per riferimento, ecco uno minimal example dello accepted approach. Inoltre,

image

import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.AbstractTableModel; 
import javax.swing.table.TableModel; 

/** 
* @see https://stackoverflow.com/a/37318673/230513 
*/ 
public class Test { 

    private void display() { 
     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     TableModel model = new AbstractTableModel() { 
      private static final int N = 32; 

      @Override 
      public int getRowCount() { 
       return N; 
      } 

      @Override 
      public int getColumnCount() { 
       return N; 
      } 

      @Override 
      public Object getValueAt(int rowIndex, int colIndex) { 
       return "R" + rowIndex + ":C" + colIndex; 
      } 
     }; 
     JTable table = new JTable(model) { 
      @Override 
      public Dimension getPreferredScrollableViewportSize() { 
       return new Dimension(320, 240); 
      } 
     }; 
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
     f.add(new JScrollPane(table)); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Test()::display); 
    } 
} 
0

Per me funziona:

table.setAutoscrolls (true);

Problemi correlati