是否存在仅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/

10-11 19:00