Java 重新缩放JFrame内容

Java 重新缩放JFrame内容,java,swing,jframe,layout-manager,Java,Swing,Jframe,Layout Manager,我正在创建一个JFrame,当窗口展开时,我希望内容保持居中,而不是与侧面保持相同的距离。我正在Eclipse上使用WindowBuilder 有没有快速的方法可以做到这一点?一种方法是,让容器使用GridBagLayout并将单个内容添加到容器中而不受任何约束 例如: import java.awt.GridBagLayout; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.UR

我正在创建一个
JFrame
,当窗口展开时,我希望内容保持居中,而不是与侧面保持相同的距离。我正在Eclipse上使用WindowBuilder


有没有快速的方法可以做到这一点?

一种方法是,让容器使用GridBagLayout并将单个内容添加到容器中而不受任何约束

例如:

import java.awt.GridBagLayout;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.*;

public class CenteredContent extends JPanel {
   public static final String IMG_PATH = "https://duke.kenai.com/iconSized/duke.gif";

   public CenteredContent() throws IOException {
      URL imgUrl = new URL(IMG_PATH);
      BufferedImage img = ImageIO.read(imgUrl);
      Icon imgIcon = new ImageIcon(img);
      JLabel label = new JLabel(imgIcon);

      setLayout(new GridBagLayout());
      add(label);
   }

   private static void createAndShowGui() {
      CenteredContent mainPanel = null;
      try {
         mainPanel = new CenteredContent();
      } catch (IOException e) {
         e.printStackTrace();
         System.exit(-1);
      }

      JFrame frame = new JFrame("CenteredContent");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

一种方法是,让容器使用GridBagLayout并将单个内容无约束地添加到容器中

例如:

import java.awt.GridBagLayout;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.*;

public class CenteredContent extends JPanel {
   public static final String IMG_PATH = "https://duke.kenai.com/iconSized/duke.gif";

   public CenteredContent() throws IOException {
      URL imgUrl = new URL(IMG_PATH);
      BufferedImage img = ImageIO.read(imgUrl);
      Icon imgIcon = new ImageIcon(img);
      JLabel label = new JLabel(imgIcon);

      setLayout(new GridBagLayout());
      add(label);
   }

   private static void createAndShowGui() {
      CenteredContent mainPanel = null;
      try {
         mainPanel = new CenteredContent();
      } catch (IOException e) {
         e.printStackTrace();
         System.exit(-1);
      }

      JFrame frame = new JFrame("CenteredContent");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

一种方法是,让容器使用GridBagLayout并将单个内容无约束地添加到容器中

例如:

import java.awt.GridBagLayout;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.*;

public class CenteredContent extends JPanel {
   public static final String IMG_PATH = "https://duke.kenai.com/iconSized/duke.gif";

   public CenteredContent() throws IOException {
      URL imgUrl = new URL(IMG_PATH);
      BufferedImage img = ImageIO.read(imgUrl);
      Icon imgIcon = new ImageIcon(img);
      JLabel label = new JLabel(imgIcon);

      setLayout(new GridBagLayout());
      add(label);
   }

   private static void createAndShowGui() {
      CenteredContent mainPanel = null;
      try {
         mainPanel = new CenteredContent();
      } catch (IOException e) {
         e.printStackTrace();
         System.exit(-1);
      }

      JFrame frame = new JFrame("CenteredContent");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

一种方法是,让容器使用GridBagLayout并将单个内容无约束地添加到容器中

例如:

import java.awt.GridBagLayout;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.*;

public class CenteredContent extends JPanel {
   public static final String IMG_PATH = "https://duke.kenai.com/iconSized/duke.gif";

   public CenteredContent() throws IOException {
      URL imgUrl = new URL(IMG_PATH);
      BufferedImage img = ImageIO.read(imgUrl);
      Icon imgIcon = new ImageIcon(img);
      JLabel label = new JLabel(imgIcon);

      setLayout(new GridBagLayout());
      add(label);
   }

   private static void createAndShowGui() {
      CenteredContent mainPanel = null;
      try {
         mainPanel = new CenteredContent();
      } catch (IOException e) {
         e.printStackTrace();
         System.exit(-1);
      }

      JFrame frame = new JFrame("CenteredContent");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

请参阅以获取更多的ideasSee以获取更多的ideasSee以获取更多的ideasSee以获取更多的ideasSee我找不到该布局。我怎样才能消除限制?@CaffeineToCode:我不确定我是否理解你的问题。你是说你找不到布局?作为核心Java的一部分,“查找”是什么意思?您不必删除约束,只需不添加约束即可。请用谷歌
JavaGridbagLayout教程
——第一次点击。为了澄清,我使用的是EclipseWindowBuilder。没有GridBagLayout,但有一个GridBagLayout。是吗?“我正在使用Eclipse WindowBuilder。”不是。。看来它在利用你。学习如何编写Java,你可能会掌握它。@CaffeineToCode:不,GridLayout和GridBagLayout不一样。您最好手工编写这样的代码,而不要使用代码生成。事实上,我强烈建议您在不熟悉GUI库时不要使用windows builder。先学习库,然后考虑使用代码生成工具,否则你会把自己画在角落里。我找不到那个布局。我怎样才能消除限制?@CaffeineToCode:我不确定我是否理解你的问题。你是说你找不到布局?作为核心Java的一部分,“查找”是什么意思?您不必删除约束,只需不添加约束即可。请用谷歌
JavaGridbagLayout教程
——第一次点击。为了澄清,我使用的是EclipseWindowBuilder。没有GridBagLayout,但有一个GridBagLayout。是吗?“我正在使用Eclipse WindowBuilder。”不是。。看来它在利用你。学习如何编写Java,你可能会掌握它。@CaffeineToCode:不,GridLayout和GridBagLayout不一样。您最好手工编写这样的代码,而不要使用代码生成。事实上,我强烈建议您在不熟悉GUI库时不要使用windows builder。先学习库,然后考虑使用代码生成工具,否则你会把自己画在角落里。我找不到那个布局。我怎样才能消除限制?@CaffeineToCode:我不确定我是否理解你的问题。你是说你找不到布局?作为核心Java的一部分,“查找”是什么意思?您不必删除约束,只需不添加约束即可。请用谷歌
JavaGridbagLayout教程
——第一次点击。为了澄清,我使用的是EclipseWindowBuilder。没有GridBagLayout,但有一个GridBagLayout。是吗?“我正在使用Eclipse WindowBuilder。”不是。。看来它在利用你。学习如何编写Java,你可能会掌握它。@CaffeineToCode:不,GridLayout和GridBagLayout不一样。您最好手工编写这样的代码,而不要使用代码生成。事实上,我强烈建议您在不熟悉GUI库时不要使用windows builder。先学习库,然后考虑使用代码生成工具,否则你会把自己画在角落里。我找不到那个布局。我怎样才能消除限制?@CaffeineToCode:我不确定我是否理解你的问题。你是说你找不到布局?作为核心Java的一部分,“查找”是什么意思?您不必删除约束,只需不添加约束即可。请用谷歌
JavaGridbagLayout教程
——第一次点击。为了澄清,我使用的是EclipseWindowBuilder。没有GridBagLayout,但有一个GridBagLayout。是吗?“我正在使用Eclipse WindowBuilder。”不是。。看来它在利用你。学习如何编写Java,你可能会掌握它。@CaffeineToCode:不,GridLayout和GridBagLayout不一样。您最好手工编写这样的代码,而不要使用代码生成。事实上,我强烈建议您在不熟悉GUI库时不要使用windows builder。先学习库,然后考虑使用代码生成工具,否则你会把自己画在角落里。