画像は、直接領域に限定されていません

ティム・ティーボウ:

画像は、以下の、このJavaコードで直接領域に限定されていません。私は、Javaの画像がで全体を表示したい400の高さによって、400幅の画像。私はでそれを行うことを試みframe.setSize(400, 400);、それが機能していません。私のコードは私が仕事に、このためのコードに入れていたと言われた何であるのdrawImageを含んでいます。私は次に何をすべきかしないでください。

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class SwingSandbox {

    public static void main(String[] args) throws IOException {
        JFrame frame = buildFrame();

        final BufferedImage image = ImageIO.read(new File("/Users/johnzalubski/Desktop/c.jpg"));

        JPanel pane = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawImage(image, 0, 0, null);
            }
        };


        frame.add(pane);
    }


    private static JFrame buildFrame() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.setVisible(true);
        return frame;
    }


}
ギルバートルブラン:

私はあなたのスイングサンドボックスコードを少し手直し。ここに私が思い付いたものです。

画像表示

私はそれが400×400の描画パネルに合わせて作られているため、画像が歪んでいます。あなたは、画像を縮小し、アスペクト比を維持する必要があります。

ここで私が行った変更があります。

  1. 私はイベントディスパッチスレッド上でSwingコンポーネントを配置する方法invokeLater SwingUtilitiesへの呼び出しを追加しました。

  2. 私が推奨サイズを設定することができるように、私は、クラスの描画パネルを作りました。あなたは、描画パネル、ないのJFrameのサイズを設定します。誰がどのように大小のJFrameがある気に?

  3. 私は、正しい順序でJFrameのメソッド呼び出しを置きます。

そして、ここのコードです。

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class SwingSandbox implements Runnable {

    public static void main(String[] args) throws IOException {
        SwingUtilities.invokeLater(new SwingSandbox());
    }

    private BufferedImage image;

    public SwingSandbox() {
        try {
            image = ImageIO.read(new File("C:\\Users\\Owner\\OneDrive\\Pictures\\Saved Pictures\\StockMarketGame.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        JFrame frame = new JFrame("Image Display");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        DrawingPanel panel = new DrawingPanel(image);

        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }

    public class DrawingPanel extends JPanel {

        private static final long serialVersionUID = 1L;

        private BufferedImage image;

        public DrawingPanel(BufferedImage image) {
            this.image = image;
            this.setPreferredSize(new Dimension(400, 400));
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, 400, 400, null);
        }

    }

}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=345286&siteId=1