3

誰かが私が回転方法を使用するのを手伝ってくれるのではないかと思っています.以前の質問を調べましたが、探していたものが見つかりません..

コードが圧縮されているため、一部の要素が欠落している可能性があります。以下のスクリーンショット。

私は現在、回転する行変数から10を加算および減算して、実際の回転メソッドを使用するのを手伝ってくれる人はいますか?

前もって感謝します..

public class Display extends JFrame{

private int Lx1 = CANVAS_WIDTH / 2;         private int Mx1 = CANVAS_WIDTH / 2;
private int Ly1 = CANVAS_HEIGHT / 2;        private int My1 = CANVAS_HEIGHT / 2;
private int Lx2 = CANVAS_WIDTH / 2;         private int Mx2 = CANVAS_WIDTH / 2;
private int Ly2 = CANVAS_HEIGHT / 2;        private int My2 = CANVAS_HEIGHT;



public Display() {
    canvas = new DrawCanvas();
    canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));
    canvas.setLayout(new GridLayout(8, 4, 80, 10));
    canvas.setComponentOrientation(ComponentOrientation.UNKNOWN);
    Container cp = getContentPane();
    cp.setLayout(new BorderLayout());

Altitude = new JTextField("Altitude", 5);               Altitude.setHorizontalAlignment(JTextField.CENTER);
Altitude.setEditable(false);                            Altitude.setOpaque(false);
Altitude.setFont(Altitude.getFont().deriveFont(25f));           Altitude.setForeground(Color.WHITE);

TASpeed = new JTextField("TAs", 5);                         TASpeed.setHorizontalAlignment(JTextField.CENTER);
TASpeed.setEditable(false);                                 TASpeed.setOpaque(false);
TASpeed.setFont(TASpeed.getFont().deriveFont(25f));             TASpeed.setForeground(Color.WHITE);

TargetAlt = new JTextField("Taralt", 5);                    TargetAlt.setHorizontalAlignment(JTextField.CENTER);
TargetAlt.setEditable(false);                               TargetAlt.setOpaque(false);
TargetAlt.setFont(TargetAlt.getFont().deriveFont(25f));         TargetAlt.setForeground(Color.WHITE);

TargetSpeed = new JTextField("TArsp", 5);                   TargetSpeed.setHorizontalAlignment(JTextField.CENTER);
TargetSpeed.setEditable(false);                             TargetSpeed.setOpaque(false);
TargetSpeed.setFont(TASpeed.getFont().deriveFont(25f));         TargetSpeed.setForeground(Color.WHITE);

BaroCorrectUp =  new JTextField("BaroCorU", 5);             BaroCorrectUp.setHorizontalAlignment(JTextField.CENTER);
BaroCorrectUp.setEditable(false);                           BaroCorrectUp.setOpaque(false);
BaroCorrectUp.setFont(BaroCorrectUp.getFont().deriveFont(25f));     BaroCorrectUp.setForeground(Color.WHITE);

BaroCorrectDown =  new JTextField("BaroCorD", 5);           BaroCorrectDown.setHorizontalAlignment(JTextField.CENTER);
BaroCorrectDown.setEditable(false);                         BaroCorrectDown.setOpaque(false);
BaroCorrectDown.setFont(BaroCorrectUp.getFont().deriveFont(25f));   BaroCorrectDown.setForeground(Color.WHITE);

WindDir = new JTextField("Wind dir", 5);                    WindDir.setHorizontalAlignment(JTextField.CENTER);
WindDir.setEditable(false);                                 WindDir.setOpaque(false);
WindDir.setFont(WindDir.getFont().deriveFont(25f));             WindDir.setForeground(Color.WHITE);

EquivSpeed = new JTextField("EquivSpe", 5);             EquivSpeed.setHorizontalAlignment(JTextField.CENTER);



addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent evt) {
            switch(evt.getKeyCode()) {
            case KeyEvent.VK_LEFT:
                Rx1 -= 10;      Ry1 += 10;          Rx2 += 10;      Ry2 -= 10;
                x1 -=10;        x2 +=10;            Mx1 += 10;      Mx2 -= 10;      

                repaint();
                break;
            case KeyEvent.VK_RIGHT:
                Rx1 -= 10;      Ry1 -= 10;          Rx2 += 10;      Ry2 += 10;
                x1 += 10;       x2 += 10;           Mx1 -= 10;      Mx2 += 10;      


                repaint();
                break;
            case KeyEvent.VK_DOWN:
                y1 -= 10;       y2 -= 10;           Ly1 -= 10;      Ly2 -= 10;
                Sy1 += 10;      Sy2 -= 10;          Ry1 +=10;       Ry2 += 10;
                repaint();
                break;
            case KeyEvent.VK_UP:
                y1 += 10;       y2 += 10;           Ly1 += 10;      Ly2 += 10;
                Sy1 -= 10;      Sy2 += 10;          Ry1 -= 10;      Ry2 -= 10;
                repaint();
                break;
            case KeyEvent.VK_M:
                System.exit(0);
                break;
            case KeyEvent.VK_4:
                countAd++;
                BaroCorrectDown.setText(countAd + "");
                repaint();
                break;
            case KeyEvent.VK_3:
                countAu++;
                BaroCorrectUp.setText(countAu + "");
                repaint();
                break;
            }
        }
    });
    cp.add(canvas);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(CANVAS_WIDTH / 3, CANVAS_HEIGHT / 4, CANVAS_WIDTH, CANVAS_HEIGHT);
    setTitle("FLIGHT DISPLAY");                         pack();
    setVisible(true);                                   requestFocus();
}

class DrawCanvas extends JPanel {
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        setBackground(CANVAS_BACKGROUND);
        g.setColor(GROUND_COLOR);
        //Draw ground Color
        g.drawRect(Sx1 - Sx1,Sy1 /2, CANVAS_WIDTH, Sy2 /2);
        g.fillRect(Sx1 - Sx1, Sy1 /2, CANVAS_WIDTH, Sy2 /2);

        g.setColor(LINE_COLOR);
        //Draw line centre horizontal
        g.drawLine(Rx1, Ry1 /2, Rx2, Ry2 /2);

        g.drawOval(x1 -15, y1 -15, 30, 30);


        //Draw line dim

        g.setColor(Color.YELLOW);
        g.fillArc(CANVAS_WIDTH /2 -150, 10, 300, 170, 30, 120);
        g.setColor(LINE_COLOR);

        //Draw polyline centre plane
        g.setColor(Color.YELLOW);
        g.drawPolyline(xs, ys, 10);
        g.fillPolygon(new Polygon(
                 new int[]{470, 350, 230, 350, 470},
                 new int[]{260, 205, 260, 225, 260},5));

        g.setColor(Color.CYAN);
        g.setColor(Color.BLACK);
        g.drawArc(CANVAS_WIDTH / 2 -150, 10, 300, 170,  30, 120);
        g.drawArc(CANVAS_WIDTH / 2 -150, 11, 300, 170,  30, 120);
        g.setColor(CANVAS_BACKGROUND);
        g.fillRect(0, 60, CANVAS_WIDTH, 50);
        Color DarkTRANS = new Color(0.0f, 0.0f, 0.0f, 1.0f);
        g.setColor(DarkTRANS);
        g.fillRect(0, 400, CANVAS_WIDTH, 50);
        g.fillRect(0, 345, 115, 55);
        g.fillRect(585, 345, 115, 55);
        g.setColor(LINE_COLOR);
        g.drawLine(Lx1 -50, Ly1 -120, Lx2 +50, Ly2 -120);
        g.drawLine(Lx1 -25, Ly1 -140, Lx2 +25, Ly2 -140);
        g.drawLine(Lx1 -75, Ly1 -160, Lx2 +75, Ly2 -160);
        g.drawLine(Lx1 -25, Ly1 +20, Lx2 +25, Ly2 +20);
        g.drawLine(Lx1 -50, Ly1 +40, Lx2 +50, Ly2 +40);
        g.drawLine(Lx1 -25, Ly1 +60, Lx2 +25, Ly2 +60);
        g.drawLine(Lx1 -75, Ly1 +80, Lx2 +75, Ly2 +80);
        g.drawLine(Lx1 -25, Ly1 +100, Lx2 +25, Ly2 +100);
        g.drawLine(Lx1 -50, Ly1 +120, Lx2 +50, Ly2 +120);
        //Draw line dim
        g.drawLine(Lx1 -25, Ly1 -20, Lx2 +25, Ly2 -20);
        g.drawLine(Lx1 -50, Ly1 -40, Lx2 +50, Ly2 -40);
        g.drawLine(Lx1 -25, Ly1 -60, Lx2 +25, Ly2 -60);
        g.drawLine(Lx1 -75, Ly1 -80, Lx2 +75, Ly2 -80);
        g.drawLine(Lx1 -25, Ly1 -100, Lx2 +25, Ly2 -100);

        //bottom triangles
        g.setColor(DarkTRANS);
        g.fillPolygon(new Polygon(
                 new int[]{115, 115, 200},
                 new int[]{400, 345, 400},3));
        g.fillPolygon(new Polygon(
                 new int[]{585, 585, 500},
                 new int[]{400, 345, 400},3));
        //top button triangle/shapes
        g.fillPolygon(new Polygon(
                new int[]{0, 200, 115, 0,},
                new int[]{0, 0, 50, 50},4));
        g.fillPolygon(new Polygon(
                new int[]{500, 700, 700, 585,},
                new int[]{0, 0, 50, 50},4));
        //middle button shapes
        g.fillPolygon(new Polygon(
                new int[]{0, 100, 100, 117, 117, 130, 117, 117, 100, 100, 0},
                new int[]{174, 174, 159, 159, 187, 197, 207, 235, 235, 220, 220},11));
                //right hand shape
        g.fillPolygon(new Polygon(
                new int[]{700, 600, 600, 583, 583, 570, 583, 583, 600, 600, 700},
                new int[]{174, 174, 159, 159, 187, 197, 207, 235, 235, 220, 220},11));
        Color TRANS = new Color(0.0f, 0.0f, 0.0f, 0.35f);
        g.setColor(TRANS);
        g.fillRect(0, 0, 115, CANVAS_HEIGHT);
        g.fillRect(585, 0, 115, CANVAS_HEIGHT);

        g.setColor(LINE_COLOR);
        g.drawLine(Mx1+20, My1 + My1, Mx2, My2-440);
        g.drawLine(Mx1-20, My1 + My1, Mx2, My2-440);
        g.drawLine(Mx1, My1 + My1, Mx2, My2-440);

        g.drawString("10", Lx1 -90, Ly1 -75);
        g.drawString("10", Lx1 +77, Ly1 -75);
        g.drawString("10", Lx1 -90, Ly1 +85);
        g.drawString("10", Lx1 +77, Ly1 +85);
        g.drawString("20", Lx1 +77, Ly1 -155);
        g.drawString("20", Lx1 -90, Ly1 -155);


        g.drawString("Press alt + 3(U), 4(D)\n" , 582, 305);
        g.drawString("To Initialize" , 595, 315);
    }
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new Display();
        }
    });
}

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

4

1 に答える 1

4

のこのバリエーションはLinePanel、アプローチを示唆している可能性があります。

画像

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

/**
 * @see https://stackoverflow.com/a/15027637/230513
 * @see https://stackoverflow.com/questions/6991648
 * @see https://stackoverflow.com/questions/6887296
 * @see https://stackoverflow.com/a/5797965/230513
 */
public class LinePanel extends JPanel {

    private Point p1 = new Point(320, 100);
    private Point p2 = new Point(320, 380);
    private boolean drawing;

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(640, 480);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.blue);
        g2d.setRenderingHint(
            RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setStroke(new BasicStroke(8,
            BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
        g.drawLine(p1.x, p1.y, p2.x, p2.y);
    }

    private class ControlPanel extends JPanel {

        private static final int DELTA = 10;

        public ControlPanel() {
            this.add(new MoveButton("\u21BA", KeyEvent.VK_LEFT, DELTA, 0));
            this.add(new MoveButton("\u21BB", KeyEvent.VK_RIGHT, -DELTA, 0));
        }

        private class MoveButton extends JButton {

            KeyStroke k;
            int dx, dy;

            public MoveButton(String name, int code, final int dx, final int dy) {
                super(name);
                this.k = KeyStroke.getKeyStroke(code, 0);
                this.dx = dx;
                this.dy = dy;
                this.setAction(new AbstractAction(this.getText()) {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        LinePanel.this.p1.translate(-dx, 0);
                        LinePanel.this.p2.translate(dx, 0);
                        LinePanel.this.repaint();
                    }
                });
                ControlPanel.this.getInputMap(
                    WHEN_IN_FOCUSED_WINDOW).put(k, k.toString());
                ControlPanel.this.getActionMap().put(k.toString(), new AbstractAction() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        MoveButton.this.doClick();
                    }
                });
            }
        }
    }

    private void display() {
        JFrame f = new JFrame("LinePanel");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.add(new ControlPanel(), BorderLayout.SOUTH);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new LinePanel().display();
            }
        });
    }
}
于 2013-02-22T15:33:46.370 に答える