我有一个JFrame,我在其中添加了两个JPanel和JScrollPane,一半是JFrame的垂直部分。 然后我加了一个。 JPanel(每个包含两个JLabel在flowlayout中)到这两个JPanel 一切都很好,但是当没有。 JPanel增加,JPanel的大小减少而滚动不起作用。 你能帮我找出为什么滚动不起作用。
以下是一些只有一个JPanel
的代码class scrol extends JFrame
{
scrol()
{
//getContentPane().setLayout(new GridLayout(1,2));
JPanel p1=new JPanel();
p1.setLayout(new GridLayout(0,1));
p1.setPreferredSize(new Dimension(300,350));
int n=1;
p1.setBorder(BorderFactory.createLineBorder(new Color(200,167,0)));
JScrollPane scrol1=new JScrollPane(p1);
scrol1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
//scrol1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scrol1.setBounds(0,0,420,405);
getContentPane().add(scrol1,BorderLayout.CENTER);
while(n<100)
{
n=n+1;
p1.add(new JPanel().add(new JLabel("hello")));
}
pack();
setSize(500,500);
setVisible(true);
}
答案 0 :(得分:0)
工作代码
您需要删除以下
p1.setPreferredSize(new Dimension(300,350));
并且您可以在while循环中添加以下代码来控制大小,尽管它也可以在没有此代码的情况下工作
tempP.setPreferredSize(new Dimension(10, 30));
下面的是带有更改的工作代码
class Scrol extends JFrame
{
Scrol()
{
//getContentPane().setLayout(new GridLayout(1,2));
JPanel p1=new JPanel();
p1.setLayout(new GridLayout(0,1));
// p1.setPreferredSize(new Dimension(300,350));
int n=1;
p1.setBorder(BorderFactory.createLineBorder(new Color(200,167,0)));
JScrollPane scrol1=new JScrollPane(p1);
scrol1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
//scrol1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
//scrol1.setBounds(0,0,420,405);
getContentPane().add(scrol1,BorderLayout.CENTER);
while(n<200)
{
n=n+1;
JPanel tempP=new JPanel();
tempP.setPreferredSize(new Dimension(10, 30));
p1.add(tempP.add(new JLabel("hello")));
}
pack();
setSize(500,500);
setVisible(true);
}
public static void main(String[] args) {
new Scrol();
}
}
答案 1 :(得分:0)
由于您只是表示您希望滚动在此处工作,因此它是:
public class Scrol extends JFrame {
Scrol() {
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(0, 1));
p1.setBorder(BorderFactory.createLineBorder(new Color(200, 167, 0)));
getContentPane().add(new JScrollPane(p1), BorderLayout.CENTER);
for (int n = 1; n < 100; n++)
p1.add(new JPanel().add(new JLabel("hello")));
setSize(500, 500); // or pack()
setVisible(true);
}
public static void main(String[] args) {
new Scrol();
}
}
备注:强>
int n = 1
在设置组件的过程中?)。