gpt4 book ai didi

java - 在 Java GUI 中动态调整 2D 绘图框的大小

转载 作者:行者123 更新时间:2023-11-30 04:35:38 26 4
gpt4 key购买 nike

我正在通过 Java GUI 编写一个图形计算器(是的,我知道已经有这样的库),当用户输入一个函数时,即x^6,我希望绘图盒根据最小值和最大值动态调整自身大小。

例如,如果用户输入从 -4 到 4 的 x^2,我的最小值为 0,最大值为 16,因此我希望在框中显示整个图表,并正确调整其大小。现在图形非常小,如果我使用 x^6 作为多项式,它看起来会非常局促。

这就是我现在的位置。

    Graphics2D g2 = (Graphics2D) g;
double myStart1 = Double.parseDouble(myStart);
double myEnd1 = Double.parseDouble(myEnd);
g2.translate(getWidth() / 2, getHeight() / 2);
g2.scale(5.0, 5.0);
g2.draw(new Line2D.Double( -myStart1 * 100,0, -myEnd1 * 100,0));
if (min < 0) {
g2.draw(new Line2D.Double(0, -min * 100, 0, -max * 100));
} else {
g2.draw(new Line2D.Double(0, min * 100, 0, -max * 100));
}
g2.setColor(Color.RED);
for (int i = 0; i < x.length; i++) {
if (i + 1 < x.length) {
g2.draw(new Line2D.Double(x[i], -y[i], x[i + 1], -y[i + 1]));

} else {
break;
}
}

}

最佳答案

至少考虑JFreeChart ,它会缩放以填充封闭 ChartPanel 的首选大小,并支持通过右键单击或鼠标滚轮进行缩放。

附录:如果外部库被禁止,SineTest,引用 here ,可能是一种方法。

enter image description here

import java.awt.Dimension;
import java.util.Random;
import javax.swing.JFrame;
import org.jfree.chart.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/** @see https://stackoverflow.com/a/13597045/230513 */
public class ChartPanelTest {

private static final Random random = new Random();

private static XYDataset createDataset() {

final XYSeries series = new XYSeries("Data");
for (double x = -4; x < 4.01; x += 0.1) {
series.add(x, Math.pow(x, 6d));
}
return new XYSeriesCollection(series);
}

private static JFreeChart createChart(final XYDataset dataset) {
JFreeChart chart = ChartFactory.createXYLineChart(
"f(x) = x^6", "x", "y", dataset,
PlotOrientation.VERTICAL, false, false, false);
return chart;
}

public static void main(String[] args) {

JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
XYDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart) {

@Override
public Dimension getPreferredSize() {
return new Dimension(640, 480);
}
};
chartPanel.setMouseWheelEnabled(true);
f.add(chartPanel);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}

关于java - 在 Java GUI 中动态调整 2D 绘图框的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13596122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com