日期:2014-05-20  浏览次数:20758 次

添加到JPanel的组件比如按钮之类的总是自动居中显示,我希望能由顶部开始显示
定义了一个JPanel panel, 然后将这个panel添加到一个scrollpane上,JScrollPane sp = new JScrollPane(panel); 然后将这个sp和另外一个Jpanel panel2放在一个frame上。 
f.getContentPane().add(adminpanel,BorderLayout.NORTH); //adminpanel是另外一个面板
f.getContentPane().add(sp,BorderLayout.CENTER); //主界面panel 

然后有多少组件就add到panel上,这个panel添加到scrollpane。通过以上代码将scollpane也就是sp添加到frame上。选择BorderLayout.CENTER方式滚动条就是有效的了。
问题是sp中的panel添加的组件总是在panel中居中显示。我希望是由panel顶部开始显示。请问该怎么办呢?  


(我之前发帖问了这个问题,但是很多人没看明白,希望大家看明白我的意思,谢谢大家帮助。分数我可以再追加)

------解决方案--------------------
panel.setLayout(new java.awt.GridLayout(int 行, int 列));
给你说的那个panel添加网格布局...那么其中的组件就是从最开头添加起,先行后列
------解决方案--------------------
请尝试使用GridBagLayout。
需要使用GridBagConstraints c = new GridBagConstraints()
例如你添加第一个,可设置c.gridX = 0, c.gridY = 0, 
c.anchor = GridBagConstraints.WEST ;第二个,c.gridY = 1

其他的属性如gridWidth, gridHeight我没有设,如有需要请自行设置。
记得每次setConstraints(你的组件, c)。
------解决方案--------------------
楼主该好好研究下布局管理器啊。
用BoxLayout,看例子:
Java code

import java.awt.Container;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class TestFrame extends JFrame{
    
    public TestFrame() {
        Container c = getContentPane();
        JPanel p = new JPanel();
        p.setLayout( new BoxLayout(p,BoxLayout.Y_AXIS) );
        p.add(new JButton("look me!"));
        p.add(new JButton("look me!"));
        c.add( new JScrollPane(p) );
        this.setDefaultCloseOperation( EXIT_ON_CLOSE );
        this.setSize( 500,600 );
        this.setLocationRelativeTo( null );
    }
    
    public static void main( String[] args ) {
        new TestFrame().setVisible( true );
    }

}