JPanel中的java JScrollPane未显示
我有以下场景:一个JFrame,其中包含几个使用CardLayout选择的JPanel。一个JPanel包含一个相当大的JTable,我将它包装在一个JScrollPane中,并将JScrollPane添加到主JPanel中:
package com.javaswingcomponents.demo;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class MyPanel extends JPanel {
private DefaultTableModel model = new DefaultTableModel();
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setBounds(100, 100, 450, 535);
frame.getContentPane().add(new MyPanel());
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public MyPanel() {
JTable table = new JTable(model);
JScrollPane scrollPaneParte = new JScrollPane(table);
scrollPaneParte.setPreferredSize(new Dimension(600, 600));
scrollPaneParte.setBounds(10, 92, 867, 92);
add(scrollPaneParte);
scrollPaneParte.setViewportView(table);
addColumns(model);
}
public void addColumns(DefaultTableModel model) {
for (int ii=0;ii<10;ii++)
model.addColumn("Field"+ii);
}
}
我最初认为问题在于使用的XY(null)布局,但即使更改为BorderLayout,也不会发生任何变化,即不显示滚动条,只显示JTable的一部分
你知道如何解决这个问题吗
编辑:我已经包括了一个完整的工作示例,它再现了这个问题
# 1 楼答案
这种变体工作可靠。请注意,面板的默认布局是flow布局。如果GUI对于流布局中的组件太小,它们将被截断,如您的示例所示。我倾向于将布局更改为网格布局,这在某种意义上解决了问题。但在本例中,我们遵循设置大小(和位置)的最佳实践,并强制执行最小大小