gpt4 book ai didi

java - 在 Java 中不使用 ImageIcon 提供可滚动 ImageView (波形)的简单方法?

转载 作者:行者123 更新时间:2023-12-01 09:00:19 27 4
gpt4 key购买 nike

是否有一种仅 Java 的方法可以在 JScrollPane 中显示更大的图片?我不想重新发明轮子,而且我已经在 J​​Label 技巧中使用 ImageIcon 来显示 32768x400 图像而苦苦挣扎,因为与平台相关的 ImageIcon 似乎存在限制。 Ubuntu 16.10 不会显示任何尺寸为 32768x400 的 ImageIcon,但它会显示较小的 ImageIcon。 Win10显示了所有这些......并且甚至没有任何类型的错误输出,这很糟糕,因为我只是浪费时间寻找问题。

那么有没有简单的解决方案,不需要我重新发明轮子?

特别是,我想显示波形,即。 float 组,因此实际上根本不需要整体图像。

最佳答案

我相信这展示了如何做你想做的事。请注意 Graph 组件的宽度为 65535。这可以通过在滚动时仅绘制图表的可见部分来进一步优化,但它的速度相当快。

import java.awt.*;
import javax.swing.*;
import java.util.function.Function;

class Graph extends JComponent {
private Function<Double, Double> fun;

public Graph(Function<Double, Double> fun) {
this.fun = fun;
setPreferredSize(new Dimension(65535, 300));
}

public void paintComponent(Graphics g) {
// clear background
g.setColor(Color.white);
Rectangle bounds = getBounds();
int w = bounds.width;
int h = bounds.height;
g.fillRect(bounds.x, bounds.y, w, h);
// draw the graph
int prevx = 0;
int prevy = fun.apply((double)prevx).intValue();
g.setColor(Color.black);
for (int i=1; i<w; i++) {
int y = fun.apply((double)i).intValue();
g.drawLine(prevx, prevy, i, y);
prevx = i;
prevy = y;
}
}
}

public class Wf {
public static void main(String[] args) {
JFrame f = new JFrame();
// we're going to draw A sine wave for the width of the
// whole Graph component
Graph graph = new Graph(x -> Math.sin(x/(2*Math.PI))*100+200);
JScrollPane jsp = new JScrollPane(graph);
f.setContentPane(jsp);
f.setSize(800, 600);
f.setVisible(true);
}
}

关于java - 在 Java 中不使用 ImageIcon 提供可滚动 ImageView (波形)的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41729299/

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