1

グラフィックはタイトルバーに表示され続けます。jlabel にカプセル化されたバッファリングされたイメージを使用し、結果のグラフィック オブジェクトを使用して、コード内で四角形を描画します。これは、jframe クラス コンストラクターの重要な部分です。

super();
        BufferedImage image=new BufferedImage(680,581,BufferedImage.TYPE_INT_ARGB);
        m_graphicsObject =image.getGraphics();

        JLabel label=new JLabel(new ImageIcon(image));

        // buttons, mouse events and other controls use listeners to handle actions
        // these listener are classes
        btn1 = new JButton("Go!");
        //btn1.setPreferredSize(new Dimension(100, 30));
        btn1.addActionListener(new button_go_Click()); //listener 1

        btn2 = new JButton("Clear!");
        //btn2.setPreferredSize(new Dimension(100, 30));
        btn2.addActionListener(new button_clear_Click()); //listener 2

        //always add created buttons/controls to form
        JPanel panel=new JPanel(new GridLayout(20,2));
        panel.add(btn1);
        panel.add(btn2);

        Container pane = this.getContentPane();

        pane.add(label);
        pane.add(panel, BorderLayout.EAST);
        this.setSize(680,581);
        this.setVisible(true);
4

2 に答える 2

2

問題は、フレームのサイズを設定するときに、フレームの境界線 (およびおそらくメニュー バーも) を考慮していないことです...

which isを使用する代わりにthis.setSize(680,581)、画像がフレームの境界線の内側 (およびそれを超えて非表示のスペース) にレンダリングされるようにするのではなく、単純に呼び出しJFrame#packて、フレームに最適なサイズを決定させる必要があります (コンテンツの優先サイズに基づいて)。

ここに画像の説明を入力ここに画像の説明を入力

左、絶対サイズ、右優先サイズ

public class SimpleImageLabel {

    public static void main(String[] args) {
        new SimpleImageLabel();
    }

    public SimpleImageLabel() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }

                JLabel imageLabel = new JLabel();

                try {
                    imageLabel.setIcon(new ImageIcon(ImageIO.read(new File("/path/to/image"))));
                } catch (Exception e) {
                }


                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(imageLabel);
                frame.pack();  // <-- The better way
//                frame.setSize(imageLabel.getPreferredSize()); // <-- The not better way
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }


}
于 2012-11-09T21:15:19.950 に答える
-2

前にも言ったように、あなたはあなたのJLabel使用の位置を設定する必要があります

aJLabel.setLocation(Point p)

また

aJLabel.setLocation(int x, int y)

画像が大きすぎる場合は、適切な配置にするために画像のサイズも変更する必要があります(:

よろしくお願いします。

于 2012-11-09T18:00:21.707 に答える