在 Java 中的 JFrame 中调整 JPanel 的大小和位置

问题描述 投票:0回答:1

我一直在研究如何为我的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);
    }
}

......................

java jframe jpanel gridbaglayout
1个回答
0
投票

如果您还有布局管理器,则调用 setSize 无效。但你可以调用的是 setPreferredSize

    setPreferredSize(GameScreenSize);

使用

setPreferredSize
通常会令人不悦,但就您而言,我认为这是实现您想要的效果的最佳方式。

© www.soinside.com 2019 - 2024. All rights reserved.