2010-03-16 4 views
33

Есть ли способ включить горизонтальную полосу прокрутки, когда это необходимо?JTable с горизонтальной полосой прокрутки

Ситуация была такой: у меня есть JTable, одна из ячеек, хранившая длинную длину данных. Следовательно, мне нужно иметь горизонтальную полосу прокрутки.

У кого-нибудь есть идея?

ответ

91

Во-первых, добавить свой JTable Внутри JScrollPane и установить политику существования скроллинга:

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

Затем укажите, что ваш JTable не должен автоматически изменять размеры столбцов, установив режим AUTO_RESIZE_OFF:

myJTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
+0

именно ........ –

+0

В Netbeans JScrollPane с JTable-компонентами был создан в методе, который не может быть изменен. Любая идея решить эту проблему? Я попытался ввести метод, однако таблица исчезла, как только я поставил выше код в обработчике кнопок для целей тестирования. –

+0

@MrCooL Вы могли бы изменить свое оригинальное сообщение, чтобы показать свой Java-код? – romaintaz

9

Установите AutoResizeMode к OFF в свойствах jTable

3

Для справки: minimal exampleaccepted approach. Кроме того,

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

Для меня это работает:

table.setAutoscrolls (истина);