我尝试使用以下方法将 JPanel 添加到 JScrollPane:
panel1 Panel1 = new panel1();
jScrollPane1.setViewportView(Panel1);
而且成功了。但问题是scrollPane不显示滚动条,即使Panel1更大。(我在用NetBeans
重写所述JScrollPane
的getPreferredSize()方法,您可能会看到滚动条。或者可以简单地调用setPreferredSize(),尽管API中有说明
重写将是有益的,因为它倾向于为所述JComponent
定义一些适当的维度。
像这样:
JScrollPane scroller = new JScrollPane() {
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 200);
}
};
scroller.setViewportView(panelWithScroll);
一个例子:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PanelScroller {
private void displayGUI() {
JFrame frame = new JFrame("Swing Worker Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel();
JPanel panelWithScroll = new JPanel();
panelWithScroll.setLayout(new GridLayout(0, 1, 5, 5));
JScrollPane scroller = new JScrollPane() {
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 200);
}
};
scroller.setViewportView(panelWithScroll);
//scroller.setPreferredSize(new Dimension(300, 200));
for (int i = 0; i < 20; i++) {
panelWithScroll.add(new JLabel(Integer.toString(i + 1), JLabel.CENTER));
}
contentPane.add(scroller);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
new PanelScroller().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
如果您只想显示滚动条,您可以调用
JScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
JScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
但这根本无法使它们起作用。
如果你不想让它们工作,你可以试着将Scrollpane中组件的首选大小设置为大于Scrollpane的大小,然后调用repaint(例如,让窗口全屏)