1

1 つのフレームを作成し、画像をフレームに表示しました。フレームのサイズを設定できません。次のコードを試してみましたが、画像全体ではなく、設定した画像の一部が表示されます。画像のサイズを変更するのを手伝ってください。

JFrame frame = new JFrame("My Window");
frame.setSize(200,200);
int frameWidth = 200;
int frameHeight = 200;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setBounds((int) screenSize.getWidth() - frameWidth, 0, frameWidth, frameHeight);
frame.pack();
frame.setVisible(true);
4

2 に答える 2

3

絶対配置レイアウトマネージャーの使用を混在させています。setSize()またはを呼び出すときsetBounds()は、絶対レイアウトを使用しています。つまり、コンポーネントのサイズと位置を手動で管理します。

を呼び出すときはpack()、サイズ変更と配置をフレーム内のコンポーネントの LayoutManagers に委譲します。LayoutManager は、優先/最小/最大サイズと制約に基づいて、コンポーネントの位置とサイズを決定します。LayoutManager の詳細については、こちらを参照してください。

さまざまなプラットフォームでより適切に機能し、コードがよりクリーンになるため、LayoutManagers に依存することをお勧めします。

于 2012-05-24T06:34:20.407 に答える
3
package test.t100.t004;

import java.awt.Image;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class ImageSizedGUI {

    ImageSizedGUI(Image image) {
        JLabel label = new JLabel(new ImageIcon(image));

        JFrame f = new JFrame("Image");
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        // either this, or..
        f.setContentPane(new JScrollPane(label));

        f.pack();
        // ..this, but could produce undesirable results for images 
        // that are larger than screen size!
        // f.setMinimumSize(f.getSize());
        f.setLocationByPlatform(true);
        f.setVisible(true);
    }

    public static void main(String[] args) throws Exception {
        String address = (args.length>0 ? args[0] :
                "http://pscode.org/media/stromlo2.jpg");
        URL url = new URL(address);
        final Image image = ImageIO.read(url);
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                new ImageSizedGUI(image);
            }
        });
    }
}
于 2012-05-24T15:40:50.913 に答える