Java 如何使图像根据父JLabel'自动缩放其大小;s大小,在Netbeans GUI Builder中?

Java 如何使图像根据父JLabel'自动缩放其大小;s大小,在Netbeans GUI Builder中?,java,swing,user-interface,netbeans,image-scaling,Java,Swing,User Interface,Netbeans,Image Scaling,背景:- 我需要使用Netbeans GUI Builder制作一个Swing GUI。第一个子任务是在整个背景中显示图像 我一直都是这样做的。我基本上制作了一个JFrame,将其布局设置为GridBagLayout,然后添加了一个透明(通过取消选中不透明属性)JPanel。(问题1) 之后,我向JFrame添加了一个JLabel,删除了它的文本并添加了一个图像。(问题2) 问题:- 首先,当我添加JPanel时,它不会显示其调整大小句柄。我 谷歌搜索了一下就找到了,在那里可以看到它 当他们创建

背景:- 我需要使用Netbeans GUI Builder制作一个Swing GUI。第一个子任务是在整个背景中显示图像

我一直都是这样做的。我基本上制作了一个JFrame,将其布局设置为GridBagLayout,然后添加了一个透明(通过取消选中不透明属性)JPanel。(问题1)

之后,我向JFrame添加了一个JLabel,删除了它的文本并添加了一个图像。(问题2)

问题:-

  • 首先,当我添加JPanel时,它不会显示其调整大小句柄。我 谷歌搜索了一下就找到了,在那里可以看到它 当他们创建一个JPanel时,它会自动显示其大小 控制柄,可以通过拖动来调整其大小

    但是我的没有(下面的截图)那么有什么属性或东西可以 可以调整大小吗?因为我的意图是使用 此透明面板包含面板上的组件(按钮等) 背景,所以它应该经过整个屏幕/窗口/框架 父母亲

  • 其次,因为我使用的图像有1024x768个维度,所以 它似乎比其父组件大得多

    因为我是一个noob,我不确定背景的大小 需要通过测量像素宽度和宽度来调整图像 父级的像素高度,然后转换实际图像的 在AdobePhotoshop等程序中达到该大小。但我是 当然,必须有一个更实际的方法来做到这一点

    我希望图像最初放置在其父对象上时,根据父对象的大小自动调整自身大小 杰拉贝尔。我该怎么做?请告诉我最简单的方法, 最好是在GUI生成器中。

  • 我还想确保图像大小、其父JLabel的大小、JPanel的大小都将在我稍后使用此应用程序更改窗口大小时调整到帧,或者如果有方法完全禁用窗口大小调整,则会调整到帧


    EDIT1@Braj

    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package com.dev_nna.dbp;
    
    
    public class JFrameParent extends javax.swing.JFrame {
    
        /**
         * Creates new form JFrameParent
         */
        public JFrameParent() {
            initComponents();
        }
    
        /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
    
            jPanel1 = new javax.swing.JPanel();
            jLabel1 = new javax.swing.JLabel();
    
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            getContentPane().setLayout(new java.awt.GridBagLayout());
    
            javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
            jPanel1.setLayout(jPanel1Layout);
            jPanel1Layout.setHorizontalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 0, Short.MAX_VALUE)
            );
            jPanel1Layout.setVerticalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 0, Short.MAX_VALUE)
            );
    
            getContentPane().add(jPanel1, new java.awt.GridBagConstraints());
    
            jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/dev_nna/dbp/scheduler/resources/Abstract-white-and-blue-backgrounds.jpg"))); // NOI18N
            jLabel1.setText("jLabel1");
            getContentPane().add(jLabel1, new java.awt.GridBagConstraints());
    
            pack();
        }// </editor-fold>                        
    
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            /* Set the Nimbus look and feel */
            //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
            /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
             * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
             */
            try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(JFrameParent.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(JFrameParent.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(JFrameParent.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(JFrameParent.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
            //</editor-fold>
    
            /* Create and display the form */
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new JFrameParent().setVisible(true);
                }
            });
        }
    
        // Variables declaration - do not modify                     
        private javax.swing.JLabel jLabel1;
        private javax.swing.JPanel jPanel1;
        // End of variables declaration                   
    }
    
    /*
    *要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
    *要更改此模板文件,请选择工具|模板
    *然后在编辑器中打开模板。
    */
    包com.dev_nna.dbp;
    公共类JFrameParent扩展了javax.swing.JFrame{
    /**
    *创建新表单JFrameParent
    */
    公共JFrameParent(){
    初始化组件();
    }
    /**
    *从构造函数中调用此方法来初始化表单。
    *警告:不要修改此代码。此方法的内容始终为
    *由表单编辑器重新生成。
    */
    @抑制警告(“未选中”)
    //                           
    私有组件(){
    jPanel1=newjavax.swing.JPanel();
    jLabel1=newjavax.swing.JLabel();
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    getContentPane().setLayout(新java.awt.GridBagLayout());
    javax.swing.GroupLayout jPanel1Layout=新的javax.swing.GroupLayout(jPanel1);
    setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
    jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGap(0,0,短.MAX_值)
    );
    jPanel1Layout.setVerticalGroup(
    jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGap(0,0,短.MAX_值)
    );
    getContentPane().add(jPanel1,new java.awt.GridBagConstraints());
    jLabel1.setIcon(新的javax.swing.ImageIcon(getClass().getResource(“/com/dev_nna/dbp/scheduler/resources/Abstract white and blue backgrounds.jpg”);//NOI18N
    jLabel1.setText(“jLabel1”);
    getContentPane().add(jLabel1,new java.awt.GridBagConstraints());
    包装();
    }//                         
    /**
    *@param指定命令行参数
    */
    公共静态void main(字符串参数[]){
    /*设置Nimbus的外观和感觉*/
    //
    /*如果Nimbus(在JavaSE6中引入)不可用,请使用默认的外观。
    *详情请参阅http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
    */
    试一试{
    for(javax.swing.UIManager.LookAndFeelInfo:javax.swing.UIManager.getInstalledLookAndFeels()){
    if(“Nimbus”.equals(info.getName())){
    setLookAndFeel(info.getClassName());
    打破
    }
    }
    }捕获(ClassNotFoundException ex){
    getLogger(JFrameParent.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
    }catch(实例化异常){
    getLogger(JFrameParent.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
    }捕获(非法访问例外){
    getLogger(JFrameParent.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
    }catch(javax.swing.UnsupportedLookAndFeelException ex){
    getLogger(JFrameParent.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
    }
    //
    /*创建并显示表单*/
    invokeLater(new Runnable()){
    公开募捐{
    新建JFrameParent().setVisible(true);
    }
    });
    }
    //变量声明-不修改
    私有javax.swing.JLabel jLabel1;
    私有javax.swing.JPanel jPanel1;
    //变量结束声明
    }
    
    “或者如果有办法完全禁用窗口大小调整。”

    您可以设置大小调整
    public class PanelForm extends javax.swing.JPanel {
        private BufferedImage image;
    
        public PanelForm() {
            try {
                image = ImageIO.read(getClass().getResource("/path/to/image/png"));
            } catch (IOException ex) {
                ex.printStackTrace();
            }  
        }
    
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
        }
    
        @Override
        public Dimension getPreferredSize() {
            return new Dimension(500, 500);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable(){
                public void run() {
                    JFrame frame = new JFrame();
                    frame.add(new PanelForm());     //  <--- add it here
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    }