我的问题如下:我试图让 JScrollPane 随窗口调整大小,水平达到一定大小,它应该停止尝试随窗口增长。
我可以用 GridBagLayout 做到这一点吗?如果是这样,如何?
我的问题如下:我试图让 JScrollPane 随窗口调整大小,水平达到一定大小,它应该停止尝试随窗口增长。
我可以用 GridBagLayout 做到这一点吗?如果是这样,如何?
一种方法是JPanel
用 a将滚动窗格包装在另一个滚动窗格中,BoxLayout
并在滚动窗格上设置 BoxLayout 将强制执行的 MaximumSize:
包装:
拉伸(最大宽度已设置为 700 像素):
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();
}
}
});
}
}