首页  >  文章  >  Java  >  如何在 Java 中创建一个旋转坐标平面,允许移动原点并旋转平面,同时显示 y 轴刻度标记的旋转标签?

如何在 Java 中创建一个旋转坐标平面,允许移动原点并旋转平面,同时显示 y 轴刻度标记的旋转标签?

Barbara Streisand
Barbara Streisand原创
2024-11-07 09:38:03528浏览

How can I create a rotating coordinate plane in Java that allows for moving the origin and rotating the plane, while displaying rotated labels for y-axis tic marks?

在 Java 中为数据和文本创建旋转坐标平面

问题:

你需要一个 Java 程序,使您能够:

  • 移动原点并旋转坐标平面,使得 x 值从新原点向右移动,y 值从新原点向上移动,新原点应该是底部 -指定内部矩形的左角。
  • 在数据图的 y 轴上绘制刻度线的旋转标签。

解决方案:

下面的代码解决了原始代码中的问题并实现了所需的功能。

DataGUI.java:

import java.awt.*;
import java.util.ArrayList;
import javax.swing.*;

class DataGUI extends JFrame{
DataGUI() {
    super("X,Y Plot");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setPreferredSize(new Dimension(800, 400));
    this.pack();
    this.setSize(new Dimension(800, 600));
    this.setLocationRelativeTo(null);


    setLayout(new GridLayout());
    ArrayList<Double> myDiffs = new ArrayList<>();
    myDiffs.add(25.0);
    myDiffs.add(9.0);
    myDiffs.add(7.0);
    myDiffs.add(16.0);
    myDiffs.add(15.0);
    myDiffs.add(6.0);
    myDiffs.add(2.0);
    myDiffs.add(8.0);
    myDiffs.add(2.0);
    myDiffs.add(27.0);
    myDiffs.add(14.0);
    myDiffs.add(12.0);
    myDiffs.add(19.0);
    myDiffs.add(10.0);
    myDiffs.add(11.0);
    myDiffs.add(8.0);
    myDiffs.add(19.0);
    myDiffs.add(2.0);
    myDiffs.add(16.0);
    myDiffs.add(5.0);
    myDiffs.add(18.0);
    myDiffs.add(23.0);
    myDiffs.add(9.0);
    myDiffs.add(4.0);
    myDiffs.add(8.0);
    myDiffs.add(9.0);
    myDiffs.add(3.0);
    myDiffs.add(3.0);
    myDiffs.add(9.0);
    myDiffs.add(13.0);
    myDiffs.add(17.0);
    myDiffs.add(7.0);
    myDiffs.add(0.0);
    myDiffs.add(2.0);
    myDiffs.add(3.0);
    myDiffs.add(33.0);
    myDiffs.add(23.0);
    myDiffs.add(26.0);
    myDiffs.add(12.0);
    myDiffs.add(12.0);
    myDiffs.add(19.0);
    myDiffs.add(14.0);
    myDiffs.add(9.0);
    myDiffs.add(26.0);
    myDiffs.add(24.0);
    myDiffs.add(13.0);
    myDiffs.add(19.0);
    myDiffs.add(2.0);
    myDiffs.add(7.0);
    myDiffs.add(28.0);
    myDiffs.add(15.0);
    myDiffs.add(2.0);
    myDiffs.add(5.0);
    myDiffs.add(17.0);
    myDiffs.add(2.0);
    myDiffs.add(16.0);
    myDiffs.add(19.0);
    myDiffs.add(2.0);
    myDiffs.add(31.0);
    DataPanel myPP = new DataPanel(myDiffs,this.getHeight(),this.getWidth());
    this.add(myPP);
    this.setVisible(true);// Display the panel.
}
public static void main(String[] args){
    DataGUI myDataGUI = new DataGUI();
    myDataGUI.setVisible(true);
}
}

DataPanel。 java:

import java.awt.*;
import java.awt.geom.AffineTransform;
import javax.swing.*;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.*;

class DataPanel extends JPanel {
Insets ins; // holds the panel's insets
ArrayList<Double> myDiffs;
double maxDiff = Double.NEGATIVE_INFINITY;
double minDiff = Double.POSITIVE_INFINITY;
double maxPlot;

DataPanel(ArrayList<Double> Diffs, int h, int w){
    setOpaque(true);// Ensure that panel is opaque.
    setPreferredSize(new Dimension(w, h));
    setMinimumSize(new Dimension(w, h));
    setMaximumSize(new Dimension(w, h));
    myDiffs = Diffs;
    repaint();
    this.setVisible(true);
}

protected void paintComponent(Graphics g){// Override paintComponent() method.
    super.paintComponent(g);
    //get data about plotting environment and about text
    int height = getHeight();
    int width = getWidth();
    ins = getInsets();
    Graphics2D g2d = (Graphics2D)g;
    FontMetrics fontMetrics = g2d.getFontMetrics();
    String xString = ("x-axis label");
    int xStrWidth = fontMetrics.stringWidth(xString);
    int xStrHeight = fontMetrics.getHeight();
    String yString = "y-axis label";
    int yStrWidth = fontMetrics.stringWidth(yString);
    int yStrHeight = fontMetrics.getHeight();

以上是如何在 Java 中创建一个旋转坐标平面,允许移动原点并旋转平面,同时显示 y 轴刻度标记的旋转标签?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn