是否存在仅Java方式在JScrollPane中显示较大图片?我不想重新发明轮子,我已经在用JLabel技巧在ImageIcon中显示32768x400图像方面感到很苦恼,因为有关ImageIcon的限制似乎取决于平台。 Ubuntu 16.10不会显示任何大小为32768x400的ImageIcon,尽管它会显示较小的ImageIcon。 Win10展示了所有这些信息。。。甚至没有任何错误输出,这很糟糕,因为我只是浪费时间搜索问题。
那么有什么简单的解决方案不需要我重新发明轮子吗?
特别是,我想显示波形。浮点数数组,因此实际上根本不需要整体图像。
最佳答案
我相信这表明了如何做自己想做的。请注意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 - 不使用ImageIcon在Java中提供可滚动 ImageView (波形)的简单方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41729299/