我一直在研究如何为我的java程序使用
GridBagLayout
系统。我开始使用布局是因为我一直在阅读,所有其他文章都使用布局,而且人们一直说没有布局是有问题和混乱的。我正在尝试制作一款游戏,并希望为实际游戏创建一个完整的应用程序和一个小窗格。但是当我用 GridBagLayout.gridx()
和 GridBagLayout.gridy()
设置位置时,它没有执行任何操作。当我将 JFrame
的布局从 null
设置为 GridBagLayout
时,游戏面板的大小就会调整,以使其完全适合其中标题的 JLabel。
package MiniGolf;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Toolkit;
import java.io.IOException;
import javax.swing.JFrame;
public class mainFrame extends JFrame{
public mainFrame(){
try{
setIconImage(FileInterperiter.GameIcon);
System.out.println(MiniGolf.RanFor() + "Succesfully set Application Icon");
} catch(Exception e) {
e.printStackTrace();
}
getContentPane().setBackground(new Color(10,10,10));
setSize(Toolkit.getDefaultToolkit().getScreenSize());
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
setLayout(gbl);
gbc.gridx = 1;
gbc.gridy = 1;
gbl.setConstraints(new visScreen(this.getSize()), gbc);
add(new visScreen(this.getSize()));
System.out.println(MiniGolf.RanFor() + "Debug " + gbc);
finishInit();
}
void finishInit(){
setVisible(true);
setMinimumSize(getContentPane().getComponent(0).getSize());
System.out.println();
}
}
对于
JPabel
:
package MiniGolf;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class visScreen extends JPanel{
Dimension GameScreenSize = new Dimension(600,600);
public visScreen(Dimension parentSize){
setBackground(new Color(10,100,10));
setForeground(new Color(10,100,10));
setSize(GameScreenSize);
setLocation((int) ((parentSize.getWidth() / 2) - (this.getWidth() / 2)),(int) ((parentSize.getHeight() / 2) - (this.getHeight() / 2)));
setVisible(true);
JLabel TitleText = new JLabel(new ImageIcon(FileInterperiter.MenuTitle.getScaledInstance(300, 150, Image.SCALE_SMOOTH)));
add(TitleText);
System.out.println(MiniGolf.RanFor() + "Applied Title Text Asset to Menu Screen");
TitleText.setLocation(60,60);
}
}
......................
如果您还有布局管理器,则调用 setSize 无效。但你可以调用的是 setPreferredSize
setPreferredSize(GameScreenSize);
使用
setPreferredSize
通常会令人不悦,但就您而言,我认为这是实现您想要的效果的最佳方式。