setPreferredScrollableViewportSize () vs setFillsViewportHeight () em JTable
No Java Swing, alguém poderia me dizer a diferença entre usar setPreferredScrollableViewportSize () depois de colocar minha JTable em JScrollPane versus chamar setFillsViewportHeight (true) na instância JTable? Quero saber qual é a boa prática. Herbert Schildt sugere o uso de setPreferredScrollableViewportSize () enquanto Horstmann e Cornell sugerem setFillsViewportHeight (). Aqui está uma pequena amostra do que eu estou brincando.
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class TableDemo {
JTable jtabEmail;
String[] headings = {"From", "Address", "Subject", "Size"};
Object[][] data = {
{ "Wendy", "[email protected]",
"Hello Herb", new Integer(287) },
{ "Alex", "[email protected]",
"Check this out!", new Integer(308) },
{ "Hale", "[email protected]",
"Found a bug", new Integer(887) },
{ "Todd", "[email protected]",
"Did you see this?", new Integer(223) },
{ "Steve", "[email protected]",
"I'm back", new Integer(357) },
{ "Ken", "[email protected]",
"Arrival time change", new Integer(512) }
};
JLabel jl;
public TableDemo() {
JFrame jfrm = new JFrame("Table Demo");
jfrm.setSize(500, 160);
jfrm.getContentPane().setLayout(new FlowLayout());
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jl = new JLabel("");
jtabEmail = new JTable(data, headings);
jtabEmail.setFillsViewportHeight(true);
JScrollPane jsp = new JScrollPane(jtabEmail);
//jtabEmail.setPreferredScrollableViewportSize(new Dimension(450, 80));
jtabEmail.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
StringBuilder sb = new StringBuilder("Selected Rows: ");
int[] rowsArray = jtabEmail.getSelectedRows();
for (int i = 0; i < rowsArray.length; i++) {
sb.append((rowsArray[i]+1) + " ");
}
jl.setText(sb.toString());
}
});
jfrm.getContentPane().add(jsp);
jfrm.getContentPane().add(jl);
//jfrm.pack();
jfrm.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new TableDemo();
}
});
}
}