bir yolu BoxLayout
ile başka JPanel
yılında ScrollPane sarın ve BoxLayout zorunlu kılar sizin kaydırma çubukları üzerinde bir MaximumSize ayarlamaktır
Gerilmiş (maks genişlik 700 px) olarak ayarlanmıştır:
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.net.MalformedURLException;
import java.util.Arrays;
import java.util.Vector;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
public class TestGridBagLayout2 {
protected void initUI() throws MalformedURLException {
final JFrame frame = new JFrame();
frame.setTitle(TestGridBagLayout2.class.getSimpleName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel(new GridBagLayout());
Vector<Vector<String>> data = new Vector<Vector<String>>();
for (int i = 0; i < 20; i++) {
Vector<String> v = new Vector<String>();
for (int j = 0; j < 1; j++) {
v.add("Cell (" + (i + 1) + "," + (j + 1) + ")");
}
data.add(v);
}
DefaultTableModel model = new DefaultTableModel(data, new Vector<String>(
Arrays.asList("Col-1"/*, "Col-2", "Col-3", "Col-4", "Col-5"*/)));
JTable table = new JTable(model);
JScrollPane scroll = new JScrollPane(table);
scroll.setMaximumSize(new Dimension(700, Integer.MAX_VALUE));
JPanel wrappingPanel = new JPanel(null);
wrappingPanel.setLayout(new BoxLayout(wrappingPanel, BoxLayout.LINE_AXIS));
wrappingPanel.add(scroll);
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.BOTH;
panel.add(wrappingPanel, gbc);
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
new TestGridBagLayout2().initUI();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
});
}
}
JComponents'ın bir metod setMaximumSize() kullandığına inanıyorum, bunu kullanmayı denediniz mi? – souldzin
GridBagLayout'u o kadar kullanmıyorum ki nasıl çalıştığını bilmiyorum. Ancak, BoxLayout'un maksimum boyuta saygı duyduğunu biliyorum. – camickr
GridBagLayout maalesef setMaximumSize() yöntemini dikkate almıyor. İlk denediğim şey. BoxLayout uygulamak istediğim tasarım için gerçekten kesmiyor ... –