问题
Is there any way to enable horizontal scroll-bar whenever necessary?
The situation was as such: I\'ve a JTable
, one of the cells, stored a long length of data. Hence, I need to have horizontal scroll-bar.
Anyone has idea on this?
回答1:
First, add your JTable
inside a JScrollPane
and set the policy for the existence of scrollbars:
new JScrollPane(myTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
Then, indicate that your JTable must not auto-resize the columns by setting the AUTO_RESIZE_OFF
mode:
myJTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
回答2:
Set the AutoResizeMode
to OFF
in the properties of the jTable
回答3:
For reference, here's a minimal example of the accepted approach. Moreover,
You can adjust the size of individual columns as shown in Setting and Changing Column Widths, as well as here and here.
You can adjust the overall size of the enclosing scroll pane as shown in Implementing a Scrolling-Savvy Client, as well as here and here.
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);
}
}
回答4:
For me it works:
table.setAutoscrolls(true);
来源:https://stackoverflow.com/questions/2452694/jtable-with-horizontal-scrollbar