[英]JScrollPane doesn't show scroll bars when JPanel is added
我試圖使用以下方法將JPanel添加到JScrollPane:
panel1 Panel1 = new panel1();
jScrollPane1.setViewportView(Panel1);
而且有效。 但是問題在於,即使Panel1較大,scrollPane也不顯示滾動條。 (我正在使用NetBeans,panel1是jpanel形式)
覆蓋上述JScrollPane
getPreferredSize()方法,您可能可以看到滾動條。 或者可以只調用setPreferredSize() ,盡管如API中所述
設置此組件的首選大小。 如果preferredSize為null,則將要求UI提供首選大小
覆蓋將是有益的,因為它傾向於為所述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(例如,通過全屏顯示窗口)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.