2010-03-16 13 views
33

Czy jest jakiś sposób, aby włączyć poziomy pasek przewijania w razie potrzeby?JTable z poziomym paskiem przewijania

Sytuacja wyglądała następująco: mam jedną komórkę, JTable, która przechowuje długą długość danych. Dlatego potrzebuję poziomego paska przewijania.

Ktoś ma pomysł na ten temat?

Odpowiedz

91

pierwsze, dodać JTable Wewnątrz JScrollPane i ustawić zasady istnienia przewijania:

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

Następnie należy wskazać, że JTable nie może automatycznie zmienić rozmiar kolumn poprzez ustawienie trybu AUTO_RESIZE_OFF:

myJTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
+0

dokładnie ........ –

+0

W Netbeans, JScrollPane z JST komponentami JTable zostały ustawione w metodzie, która nie może być modyfikowana. Każdy pomysł na rozwiązanie tego problemu? Próbowałem jednak wstawić tę metodę, jednak tabela zniknęła po umieszczeniu powyższego kodu w programie obsługi przycisku dla celów testowych. –

+0

@MrCooL możesz edytować swój oryginalny post, aby pokazać swój kod Java? – romaintaz

9

Ustaw AutoResizeMode do OFF w właściwościach jTable

3

Dla odniesienia, tutaj jest minimal example z accepted approach. Ponadto

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

Dla mnie to działa:

table.setAutoscrolls (true);

Powiązane problemy