setPreferredScrollableViewportSize () против setFillsViewportHeight () в JTable
Может ли кто-нибудь сказать мне в Java Swing разницу между использованием setPreferredScrollableViewportSize () после помещения моей JTable в JScrollPane и вызовом setFillsViewportHeight (true) для экземпляра JTable? Я хочу знать, какая из них является хорошей практикой. Герберт Шильдт предлагает использовать setPreferredScrollableViewportSize (), а Хорстманн и Корнелл предлагают setFillsViewportHeight (). Вот краткий пример того, с чем я дурачусь.
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();
}
});
}
}