需要布局吗?它应该如何使用?

时间:2014-04-13 07:50:58

标签: java swing layout jpanel grid-layout

因此,我正在编写一个小型测试程序,以便从诸如minecraft和runescape等游戏中复制库存。基本上是一个框架,里面有另一个框架,里面有你的项目的图片,还有一个滚动条,向下滚动你库存中的所有东西。我的库存中的“Stuff”将是稍后添加的按钮,具有自己的功能,因此您可以垂直滚动查看所有“内容”。现在我有一些测试按钮被添加到deomsntrate错误。基本上我希望按钮为100,100,并且它们是4行,然后进入下一列。我虽然GridLayout是最好的选择,但它似乎在添加到滚动窗格后添加更多行。嗯,下面的代码被撇去了:

public class inventory extends JFrame{

public static void main(String[] args){
    new inventory();
}

JPanel mainInv = new JPanel();
JScrollPane sp;

public inventory(){
    setSize(500,500);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Toolkit tk = this.getToolkit();
    setLocation(tk.getScreenSize().width/2-getWidth()/2, tk.getScreenSize().height/2-getHeight()/2);
    setLayout(null);

    mainInv.setSize(getWidth()-10, 1000);
    mainInv.setBackground(Color.blue);
    mainInv.setLayout(new GridLayout(8,4));

    sp = new JScrollPane(mainInv,         JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    sp.setMaximumSize(new Dimension(400,400));
    sp.setBounds(5, 5, 500-10, 500-130);

    JButton[] testButs = new JButton[100];
    for(int i = 0; i < 50; i++){
        testButs[i] = new JButton("Test Button " + i);
        testButs[i].setSize(100,100);
        mainInv.add(testButs[i]);
    }   

    add(sp);

    setVisible(true);
}
}

1 个答案:

答案 0 :(得分:0)

使用GridLayout时,行数是主要因素。

如果您有8行和4列只能容纳48个按钮,如果您尝试添加第49个按钮,它将创建第5列而不是第9行。

您可以通过设置更多行的GridLayout来解决您的问题。