java - 如何为 JScrollPane 的视口(viewport)绘制引导标记

标签 java swing paint jviewport

我有 JFrame,它包含一个 Jscrollpane,而 Jscrollpane 又包含一个 Jpanel,其中显示图像。所有鼠标事件和绘图都遵循 Jpanel 坐标。现在,我想在视口(viewport)顶部放置一个引导线标记,无论图像如何缩放或平移,标记都应保持不变。最好的方法是什么?提前致谢。

/image/m4qe2.png

最佳答案

您可以在滚动 Pane 的视口(viewport)上进行自定义绘画:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

public class ViewportBackground
{
    private static void createAndShowUI()
    {
        JViewport viewport = new JViewport()
        {
            @Override
            protected void paintChildren(Graphics g)
            {
                super.paintChildren(g);
                int w = this.getWidth();
                int h = this.getHeight();
                g.drawLine(0, 0, w, h);
            }
        };

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setViewport(viewport);
        scrollPane.setViewportView( new JLabel( new ImageIcon(...) ) );

        JFrame frame = new JFrame("Viewport Background");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( scrollPane );
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}

关于java - 如何为 JScrollPane 的视口(viewport)绘制引导标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33908300/

相关文章:

swing - JTree 动态节点插入

java - 开发像 Android 这样的 Java 应用程序吗?

Java PaintComponents 没有被调用

java sed 命令不产生响应

java - FragmentTransaction 中的 add() 无法应用?

java - Swing 错误 ClassCastException

java - 在线程中使用 Paint() 方法

java - 在 gradle 中将参数传递给编译器和 javadoc

java - 如何将日期格式更改为其他格式?

java - 图形是在 java swing 中绘制在 UI 之上的,