【问题标题】:Jpanel Zooming like in a paint programJpanel 像在绘画程序中一样缩放
【发布时间】:2012-03-11 23:32:37
【问题描述】:

我对某个程序的缩放功能有疑问。这是交易,我有一个画布,它扩展了一个 jpanel 并在上面绘制了一个网格。我的问题是如何实现缩放功能。通过缩放 jpanel,网格上的每个小方块将分成 3x3。

我尝试过进行 3 面板缩放,3 个面板具有 3 种不同尺寸,网格上有不同的划分,但它占用了大量内存和运行时间。我只实现了 1 个具有固定大小的 jpanel,并将通过使用 Graphics2d.scale(...) 对其进行缩放,但似乎在鼠标坐标和 jpanel 上存在偏移。我知道它可以修复,但我的另一个问题是 jpanel 是用 jscrollpane 实现的。修复坐标偏移会解决这个问题,我没有尝试过,因为我不知道如何。

在 jpanel 中绘制网格

public void paint(Graphics g){
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;

    int x=0;int y=0;
    g2.setColor(Color.GRAY);
    for(int i=1; i<this.divisions; i++){
        x = i *divSize;
        g2.drawLine(x, 0, x, this.size);
    }
    for(int i=1; i<this.divisions; i++){
        y = i *divSize;
        g2.drawLine(0, y, this.size, y);
    }
            /*code for filling the small squares with colors*/

}

【问题讨论】:

  • 正如我尝试使用 Graphics2d.scale(double,double);我注意到 JPanel 的大小保持不变。我需要它,我仍然可以访问原始 JPanel 的其他部分

标签: java swing zooming jpanel


【解决方案1】:

您可以在 BufferedImage 上绘制所有内容。可以对图像的图形进行缩放以达到所需的缩放效果。

但无论如何,如果您将 JScrollPane 与面板内的面板一起使用,则面板的大小(首选大小)必须调整为在需要时显示滚动条。

【讨论】:

  • +1 但是....从哪里来 super.paintComponent(g); 里面 paint(Graphics g){ 每天 3-4 个问题,直接画到 JFrame
  • @StanislavL:感谢super.paintComponent(g) 从一开始就在编辑器上出现问题。在网格上我遵循了这个:Drawing a dot grid 和这个Image zoomer
猜你喜欢
  • 1970-01-01
  • 2013-03-06
  • 2012-06-06
  • 2013-11-17
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
相关资源
最近更新 更多