日期:2014-05-20  浏览次数:20617 次

java图形界面里面怎么实现图片缩放
java图形界面里面怎么实现图片缩放,比如我有一个frame里面放了一个label,label上面有张图片,当frame大小改变时让图片一起变,图片原来是将label填满的,

------解决方案--------------------
稍后贴代码
------解决方案--------------------
Image image = new ImageIcon("images/set2.jpg").getImage();
image = image.getScaledInstance(300, 180, 0);

JLabel label = new JLabel();
label.setBounds(70, 75, 300, 200);
label.setIcon(new ImageIcon(image));

------解决方案--------------------
Java code

package musicPlatform.client.login;

import java.awt.*;
import javax.swing.*;

import musicPlatform.client.config.SaveMusicFileDirectory;

import testSwing2.UsedToChangeMyFrame;

public class SubstituteLoginFrame extends JFrame {
    private static final long serialVersionUID = 2022587044957057382L;
    private JButton jButton1;// 登录
    private JButton jButton2;// 注册
    private JLabel jLabel2;// 密码
    private JPasswordField jTextField2;// 密码
    private JTextField jTextField1;// 用户名
    private JLabel jLabel1;// 用户名

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new SubstituteLoginFrame();
            }
        });
    }
    private static void clientConfig() {
        String defaultPath = System.getProperty("user.home") + "\\" + "music";
        SaveMusicFileDirectory save = new SaveMusicFileDirectory();
        save.creatXML(defaultPath);
    }

    public SubstituteLoginFrame() {
        super();
        autoTest();// 检查服务器
        init();
    }

    /**
     * 首次开启客户端时检查连接状态
     */
    private void autoTest() {
        RespondLoginEnter res = new RespondLoginEnter();
        res.initialTestLinkage();
    }
    public void illegalCallingEntrance() {
        SubstituteLoginFrame lf = new SubstituteLoginFrame();
        lf.setLocationRelativeTo(null);
        lf.setVisible(true);
    }

    public void init() {
        Container c = this.getContentPane();
        JPanel lowerPanel = new MyPanelk();
        c.add(lowerPanel);
        GroupLayout lowerPanelLayout = new GroupLayout((JComponent) lowerPanel);
        lowerPanel.setLayout(lowerPanelLayout);
        lowerPanel.setLocale(new java.util.Locale("zh", "TW"));
        // lowerPanel.setPreferredSize(new Dimension(1100, 680));
        {
            jButton1 = new JButton();
            jButton1.setText("注册");
        }
        {
            jButton2 = new JButton();
            jButton2.setText("\u767b\u5f55");
        }
        {
            jLabel1 = new JLabel();
            jLabel1.setText("\u7528\u6237\u540d");
            jLabel1.setFont(new java.awt.Font("微软雅黑", 3, 11));
            jLabel1.setForeground(new java.awt.Color(255, 255, 255));
        }
        {
            jLabel2 = new JLabel();
            jLabel2.setText("\u5bc6\u7801");
            jLabel2.setFont(new java.awt.Font("微软雅黑", 3, 11));
            jLabel2.setForeground(new java.awt.Color(255, 255, 255));
        }
        {
            jTextField2 = new JPasswordField();
            jTextField2.addFocusListener(new FocusAdapter() {
                public void focusGained(FocusEvent evt) {
                    jTextField2.selectAll();
                }
            });
        }
        {
            jTextField1 = new JTextField();
            jTextField1.addFocusListener(new FocusAdapter() {
                public void focusGained(FocusEvent evt) {
                    jTextField1.selectAll();
                }
            });
        }
        lowerPanelLayout.setVerticalGroup(lowerPanelLayout
                .createSequentialGroup()
                .addContainerGap(63, 63)
                .addGroup(
                        lowerPanelLayout
                                .createParallelGroup(
                                        GroupLayout.Alignment.BASELINE)
                                .addComponent(jTextField1,
                                        GroupLayout.Alignment.BASELINE,
                                        GroupLayout.PREFERRED_SIZE, 21,
                                        GroupLayout.PREFERRED_SIZE)
                                .addComponent(jLabel1,
                                        GroupLayout.Alignment.BASELINE,
                                        GroupLayout.PREFERRED_SIZE,
                                        GroupLayout.PREFERRED_SIZE,
                                        GroupLayout.PREFERRED_SIZE))
                .addGap(19)
                .addGroup(
                        lowerPanelLayout
                                .createParallelGroup(
                                        GroupLayout.Alignment.BASELINE)
                                .addComponent(jTextField2,
                                        GroupLayout.Alignment.BASELINE,
                                        GroupLayout.PREFERRED_SIZE, 21,
                                        GroupLayout.PREFERRED_SIZE)
                                .addComponent(jLabel2,
                                        GroupLayout.Alignment.BASELINE,
                                        GroupLayout.PREFERRED_SIZE,
                                        GroupLayout.PREFERRED_SIZE,
                                        GroupLayout.PREFERRED_SIZE))
                .addGap(29)
                .addGroup(
                        lowerPanelLayout
                                .createParallelGroup(
                                        GroupLayout.Alignment.BASELINE)
                                .addComponent(jButton2,
                                        GroupLayout.Alignment.BASELINE,
                                        GroupLayout.PREFERRED_SIZE, 22,
                                        GroupLayout.PREFERRED_SIZE)
                                .addComponent(jButton1,
                                        GroupLayout.Alignment.BASELINE,
                                        GroupLayout.PREFERRED_SIZE, 22,
                                        GroupLayout.PREFERRED_SIZE))
                .addContainerGap(45, 45));
        lowerPanelLayout
                .setHorizontalGroup(lowerPanelLayout
                        .createSequentialGroup()
                        .addContainerGap(108, 108)
                        .addGroup(
                                lowerPanelLayout
                                        .createParallelGroup()
                                        .addGroup(
                                                lowerPanelLayout
                                                        .createSequentialGroup()
                                                        .addGroup(
                                                                lowerPanelLayout
                                                                        .createParallelGroup()
                                                                        .addComponent(
                                                                                jLabel1,
                                                                                GroupLayout.Alignment.LEADING,
                                                                                GroupLayout.PREFERRED_SIZE,
                                                                                46,
                                                                                GroupLayout.PREFERRED_SIZE)
                                                                        .addGroup(
                                                                                GroupLayout.Alignment.LEADING,
                                                                                lowerPanelLayout
                                                                                        .createSequentialGroup()
                                                                                        .addComponent(
                                                                                                jLabel2,
                                                                                                GroupLayout.PREFERRED_SIZE,
                                                                                                26,
                                                                                                GroupLayout.PREFERRED_SIZE)
                                                                                        .addGap(20)))
                                                        .addPreferredGap(
                                                                LayoutStyle.ComponentPlacement.RELATED,
                                                                12,
                                                                Short.MAX_VALUE)
                                                        .addGroup(
                                                                lowerPanelLayout
                                                                        .createParallelGroup()
                                                                        .addComponent(
                                                                                jTextField2,
                                                                                GroupLayout.Alignment.LEADING,
                                                                                GroupLayout.PREFERRED_SIZE,
                                                                                108,
                                                                                GroupLayout.PREFERRED_SIZE)
                                                                        .addComponent(
                                                                                jTextField1,
                                                                                GroupLayout.Alignment.LEADING,
                                                                                GroupLayout.PREFERRED_SIZE,
                                                                                108,
                                                                                GroupLayout.PREFERRED_SIZE)))
                                        .addGroup(
                                                GroupLayout.Alignment.LEADING,
                                                lowerPanelLayout
                                                        .createSequentialGroup()
                                                        .addPreferredGap(
                                                                jLabel2,
                                                                jButton1,
                                                                LayoutStyle.ComponentPlacement.INDENT)
                                                        .addComponent(jButton1,
                                                                0, 67,
                                                                Short.MAX_VALUE)
                                                        .addGap(17)
                                                        .addComponent(
                                                                jButton2,
                                                                GroupLayout.PREFERRED_SIZE,
                                                                70,
                                                                GroupLayout.PREFERRED_SIZE)))
                        .addContainerGap(120, 120));

        /**
         * 注册监听
         */
        {
            jButton1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    // lf.setVisible(false);
                    // System.out.println("这里可以显示注册窗口了");
                    SubstituteLoginFrame.this.setVisible(false);
                    // SubstituteLoginFrame.this.dispose();
                    RespondLoginEnter res = new RespondLoginEnter();
                    res.testLinkage();
                    new LogonJFrame();
                    InOn inon = new InOn();// 保存本登录窗口对象
                    inon.backToLogin(SubstituteLoginFrame.this);
                }
            });
        }
        /**
         * 登录监听
         */
        {
            // jButton1.addActionListener(new
            // jButton1ActionListener(this));
            jButton2.addActionListener(new ActionListener() { // 注册按钮事件
                public void actionPerformed(ActionEvent event) { // 事件处理器
                    String userName = jTextField1.getText();
                    String password = jTextField2.getText();
                    // 检查输入合法性
                    if (ToolString.isInefficacy(userName)
                            || ToolString.isInefficacy(password)) {
                        JOptionPane.showMessageDialog(null, "   用户名和密码不能为空",
                                "请重新输入", JOptionPane.ERROR_MESSAGE);
                        return;
                    }
                    RespondLoginEnter respondLogin = new RespondLoginEnter();
                    try {
                        // 连接服务器
                        respondLogin.linkage();
                        // 包装用户名,密码:request=login★userName=a★userPassword=d★
                        String nameAndPass = ToolString.packageLoginData(
                                userName, password);
                        // 发送用户名,密码
                        respondLogin.sendMessage(nameAndPass);// 发送成功后客户端若等不到服务器数据,界面不响应
                        // 获得服务器响应 收不到数据的处理?
                        System.out
                                .println("开始接收服务器数据:loginsuccess or loginfail!");
                        String receivedMsg = respondLogin.receiveMsg();
                        if (receivedMsg == null) {
                            System.out.println("服务器响应超时!");// 能否显示?????????????????
                        }
                        // respondLogin.close(); //
                        // 需要关闭????????????登錄成功也會關閉????????????????????????????
                        if (!"loginsuccess".equals(receivedMsg)) {
                            JOptionPane.showMessageDialog(null, "用户名或密码错误",
                                    "登录失败", JOptionPane.ERROR_MESSAGE);
                            return;
                        } else {
                            // System.out.println("这里开始显示主页并关闭登录窗口");//
                            // -------------------------------------------------------
                            SubstituteLoginFrame.this.dispose();
                            // 登录成功, 显示主页窗口
                            new UsedToChangeMyFrame();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }
            });
        }

        this.setVisible(true);
        this.setResizable(false);
        String direct = System.getProperty("user.dir")
                + "\\src\\icon\\pro\\key1.gif";
        Image img = Toolkit.getDefaultToolkit().getImage(direct);
        this.setIconImage(img);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        this.setLocation(screenSize.width / 2 - 400 / 2,
                screenSize.height / 2 - 250 / 2);
        this.setTitle("\u97f3\u4e50\u5e73\u53f0");
        // this.setSize(new Dimension(1100, 680));
        this.setSize(new Dimension(400, 250));
    }

}

class MyPanelk extends JPanel {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    public void paintComponent(Graphics g) { // 重绘函数
        Graphics2D g2 = (Graphics2D) g;
        super.paintComponent(g);
        String directory = System.getProperty("user.dir")
                + "\\src\\icon\\pro\\wow2.jpg";
        Image img = Toolkit.getDefaultToolkit().getImage(directory);
        g2.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this); // 在面板上绘制背景图片
    }
}

------解决方案--------------------
Image的getScaledINnstance(int width, int height, int hints)方法
------解决方案--------------------
Java code