Java 组件宽度和高度固定的GridLayout?
我有一个主面板,我正在向其中动态添加组件 主面板的GridLayout限制为3列0行(0行将允许行无限增长),但问题是我希望所有组件都具有固定大小或组件的首选大小 我可以使用其他布局,如果它符合我的要求。。。但现在只有GridLayout允许我将列限制为3Java 组件宽度和高度固定的GridLayout?,java,swing,layout,user-interface,Java,Swing,Layout,User Interface,我有一个主面板,我正在向其中动态添加组件 主面板的GridLayout限制为3列0行(0行将允许行无限增长),但问题是我希望所有组件都具有固定大小或组件的首选大小 我可以使用其他布局,如果它符合我的要求。。。但现在只有GridLayout允许我将列限制为3 …我忘了提到,主面板被添加到JScrollpane中,所以我可以垂直滚动。一种方法是使用JPanels。GridLayout将拉伸组件,但如果将组件包装在JPanel中,则JPanel将被拉伸。而且,由于JPanel使用FlowLayout,
…我忘了提到,主面板被添加到JScrollpane中,所以我可以垂直滚动。一种方法是使用JPanels。GridLayout将拉伸组件,但如果将组件包装在JPanel中,则JPanel将被拉伸。而且,由于JPanel使用FlowLayout,它不会拉伸组件,因此您的组件将保持其首选大小 下面是一个使用JButton的示例。请注意,我是如何在每个循环中将它们添加到(新的)JPanel中的,然后将面板添加到网格布局中的
import javax.swing.*;
public class GridLayout {
public static void main( String[] args ) {
SwingUtilities.invokeLater( new Runnable() {
public void run() {
JFrame frame = new JFrame();
frame.setLayout( new java.awt.GridLayout( 0, 3 ) );
for( int i = 0; i < 21; i++ ) {
JPanel panel = new JPanel(); // Make a new panel
JButton button = new JButton( "Button "+i );
panel.add( button ); // add the button to the panel...
frame.add( panel ); // ...then add the panel to the layout
}
frame.pack();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
} );
}
}
import javax.swing.*;
公共类网格布局{
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
JFrame=新JFrame();
setLayout(新java.awt.GridLayout(0,3));
对于(int i=0;i<21;i++){
JPanel panel=new JPanel();//创建一个新面板
JButton按钮=新JButton(“按钮”+i);
panel.add(button);//将按钮添加到面板。。。
frame.add(panel);/…然后将面板添加到布局中
}
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
} );
}
}
如果符合我的要求,我可以使用其他布局…
-是的,这就是你需要做的。GridLayout始终调整组件的大小。尝试GridBagLayout。很难从您的描述中分辨出来,但我建议您使用类似于GridBagLayout
或甚至FlowLayout
的东西,这两者都可以(如果配置正确)如果组件有足够的空间,请尊重它们的首选大小…@camickr如何将GridBagLayout限制为3列?@MadProgrammer如何将FlowLayout限制为3列?@JovanMeshkov您必须自己做这件事<如果以任何方式添加超过3个组件,则代码>网格布局将溢出到另一行。。。