allelopath
asked on
getPreferredScrollableViewportSize() height is too much
My experience has been that the height from JTable.getPreferredScrolla bleViewpor tSize() is always way too much, as in the example below. Why is this?
jTable getPreferredSize: java.awt.Dimension[width=2 25,height= 96]
jTable getPreferredScrollableView portSize: java.awt.Dimension[width=4 50,height= 400]
jTable getPreferredSize: java.awt.Dimension[width=2
jTable getPreferredScrollableView
package jtableinjscrollpane;
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.border.Border;
import javax.swing.table.DefaultTableModel;
/**
* contains a table
*/
public class MyPanel extends JPanel {
private JScrollPane jScrollPane;
private final JTable jTable;
private DefaultTableModel defaultTableModel;
private final String[] columnNameArray = {"One" , "Two", "Three"};
Object[][] dataArray = {
{ "row 1", "1b", ""},
{ "row 2", "", "2c"},
{ "row 3", "3b", ""},
{ "row 4", "", "4c"},
{ "row 5", "5b", ""},
{ "row 6", "", "6c"},
};
/**
* constructor
*
* @param name
*/
public MyPanel (String name) {
super();
defaultTableModel = new DefaultTableModel(dataArray, columnNameArray);
jTable = new JTable (defaultTableModel);
this.setName(name);
setLayout();
}
/**
* set layout of components
*/
public void setLayout() {
this.setLayout(new BorderLayout());
jTable.setFillsViewportHeight(true);
jScrollPane = new JScrollPane(jTable);
jScrollPane.getViewport().setPreferredSize(jTable.getPreferredSize());
final Border loweredbevel = BorderFactory.createLoweredBevelBorder();
jScrollPane.setBorder(loweredbevel);
jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
this.add(jScrollPane, BorderLayout.CENTER);
System.out.println ("jTable getPreferredSize: " + jTable.getPreferredSize());
System.out.println ("jTable getPreferredScrollableViewportSize: " + jTable.getPreferredScrollableViewportSize());
}
/**
*
* @param args
*/
public static void main(String[] args) {
try{
UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName());
}
catch (final Exception e) {
e.printStackTrace();
}
final MyPanel jPanel = new MyPanel("My Panel");
final JFrame frame = new JFrame();
frame.add(jPanel, BorderLayout.CENTER);
frame.setTitle("My Panel");
// frame.setPreferredSize(new Dimension(500, 250));
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
}
});
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setLocation(300, 200);
frame.pack();
frame.setVisible(true);
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.