我的问题是:我试图让一个JScrollPane调整窗口大小,水平达到一定的大小,它应该停止尝试与窗口一起增长。在java中使用GridBagLayout时设置最大组件大小
我可以使用GridBagLayout来做到这一点吗?如果是这样,怎么样?要做到这一点
我的问题是:我试图让一个JScrollPane调整窗口大小,水平达到一定的大小,它应该停止尝试与窗口一起增长。在java中使用GridBagLayout时设置最大组件大小
我可以使用GridBagLayout来做到这一点吗?如果是这样,怎么样?要做到这一点
一种方法是包你在另一个JPanel
滚动窗格与BoxLayout
和设置您的滚动窗格一个MAXIMUMSIZE它的BoxLayout将执行:
盒装:
拉伸(最大宽度已设置为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();
}
}
});
}
}
这是一个好主意,但非常臃肿......我会等到看到更好的想法出现之后,再将其标记为解决方案。不管怎样,谢谢你 ! – 2013-03-01 17:18:04
@ user2015634让我知道是否有更好的东西出现。我会很乐意学习如何以一种更简单的方式来做到这一点。 – 2013-03-01 19:11:28
我相信JComponents有一个方法setMaximumSize(),你尝试过使用它吗? – souldzin 2013-03-01 15:44:25
我不使用GridBagLayout,所以我不知道它是如何工作的。但是,我知道BoxLayout尊重最大尺寸。 – camickr 2013-03-01 16:08:21
不幸的是GridBagLayout没有考虑setMaximumSize()。我试过的第一件事。 BoxLayout并没有真正地为我想要实现的设计而削减它... – 2013-03-01 16:22:16