6

// Java でオブジェクトを描画する方法を学習しようとしています。上手になってきましたが、画面に画像が表示されると、それを操作するのに苦労しています。私が入力した数字は、形状がどのようになっているのか意味がありません. 少なくとも私にはそうではありません。代数では、x 軸の数を増やすと右に移動し、y 軸の数を増やすと上に移動します。それはここで起こっていることではありません。これがどのように機能するかを誰かに説明してもらえますか? 私はまだJavaに慣れていないので、説明と詳細が多いほど良い. 夏の間、Java を学ぶために 1 日に 2 時間ほど外に出ようとしていますが、少しイライラすることもあります。どんな助けでも大歓迎です。

4

1 に答える 1

9

ここでは画面のCo-ordinatesからスタートし、の値を大きくすると に向かって移動しますが、 の値を大きくすると に移動します。これをもう少しよく理解するための小さなプログラムの例を次に示します。任意の場所をクリックするだけです。TOP LEFT SIDEXRIGHT SIDEYDOWNWARDS

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

public class DrawingExample
{
    private int x;
    private int y;
    private String text;
    private DrawingBase canvas;

    private void displayGUI()
    {
        JFrame frame = new JFrame("Drawing Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        canvas = new DrawingBase();
        canvas.addMouseListener(new MouseAdapter()
        {
            public void mouseClicked(MouseEvent me)
            {
                text = "X : " + me.getX() + " Y : " + me.getY();
                x = me.getX();
                y = me.getY();
                canvas.setValues(text, x, y);
            }
        }); 

        frame.setContentPane(canvas);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new DrawingExample().displayGUI();
            }
        });
    }
}

class DrawingBase extends JPanel
{
    private String clickedAt = "";
    private int x = 0;
    private int y = 0;

    public void setValues(String text, int x, int y)
    {
        clickedAt = text;
        this.x = x;
        this.y = y;
        repaint();
    }

    public Dimension getPreferredSize()
    {
        return (new Dimension(500, 400));
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawString(clickedAt, x, y);
    }
}
于 2012-05-30T06:52:04.797 に答える