3

「AdjustWidowRect」が何をするかわからない場合は、MSDN からの説明を次に示します。

目的のクライアント四角形のサイズに基づいて、ウィンドウ四角形の必要なサイズを計算します。

より明確に:

Swing では、ボーダーを含む JFrame のサイズを設定すると、つまり、JFrame のサイズを 640 x 480 に設定した場合、入力したサイズはフレームの境界のサイズをカウントするため、クライアントのサイズにはなりません。

長方形が必要で、それを調整できるようにしたいので、JFrame のサイズがその長方形に設定されている場合、JFrame のクライアント サイズは調整前の長方形になります。

4

2 に答える 2

3

JFrame のサイズを設定するには、JFrame のインセットを計算し、必要なクライアント サイズに追加する必要があります。

Insets insets = getInsets();
于 2012-12-12T16:34:15.843 に答える
2

AFAIUは、受け入れられた回答は、メニューバーまたはミックス内の他のコンポーネントを考慮していません。これは、コンポーネントの推奨サイズを上書きし、フレームを梱包することによって行われます。

JFrameにグラフィックを描画していますが、正確なサイズにする必要があります。

JFrameまたはなどのトップレベルのコンテナにペイントしないでくださいJWindowJPanel代わりに、またはにレンダリングしBufferedImageてTLCに追加します。

サイズ設定されたGUI-「裏返し」から

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

public class SizedGUI {

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                // the GUI as seen by the user (without frame)
                JPanel gui = new JPanel(new BorderLayout());
                gui.setBorder(new EmptyBorder(2,3,2,3));

                gui.add(new FixedSizeComponent());

                gui.setBackground(Color.RED);

                JFrame f = new JFrame("Demo");
                f.add(gui);
                // Ensures JVM closes after frame(s) closed and
                // all non-daemon threads are finished
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                // See http://stackoverflow.com/a/7143398/418556 for demo.
                f.setLocationByPlatform(true);

                // ensures the frame is the minimum size it needs to be
                // in order display the components within it
                f.pack();
                // tweak to ensure the GUI never gets too small
                f.setMinimumSize(f.getSize());
                // should be done last, to avoid flickering, moving,
                // resizing artifacts.
                f.setVisible(true);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}

class FixedSizeComponent extends JPanel {

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400,100);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int w = getWidth();
        int h = getHeight();
        g.setColor(Color.BLACK);
        g.drawString(w + "x" + h, w/2, h/2);
    }
}
于 2012-12-13T02:01:16.400 に答える