java - 如何在 JScrollPane 之上绘制?

标签 java swing jframe jscrollpane paint

我有一个 JScrollPane 填充了一个 JPanel(这是我的 JFrame 的内容面板)。 JPanel 执行自定义绘图 - 但是,它不会出现在 JScrollPane 之上。我应该覆盖 paintComponent 以外的东西吗?

这是一个演示:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.LayoutManager;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class Test {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                // Create the frame.
                JFrame frame = new JFrame();
                frame.setPreferredSize(new Dimension(1024, 768));
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JPanel custom = new CustomPanel(new BorderLayout());
                // Add the scroll pane.
                JScrollPane scroll = new JScrollPane();
                scroll.setBorder(BorderFactory.createLineBorder(Color.blue));
                custom.add(scroll, BorderLayout.CENTER);

                // Display the frame.
                frame.setContentPane(custom);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

        });
    }
}

@SuppressWarnings("serial")
class CustomPanel extends JPanel {

    public CustomPanel(LayoutManager lm) {
        super(lm);
    }

    @Override
    public void paintComponent(Graphics g) {
        g.setColor(Color.red);
        g.drawRect(200, 200, 200, 200);
    }

}

最佳答案

I'd like for the paint on the JPanel to go over top of the paint on the JScrollPane

你可以画到

  • JViewport 可以看到herehere

  • 使用 JLayer(Java7) based on JXlayer(Java6)

  • 非常相似(就像今天的 JLayer)正在绘制到 GlassPane,注意 GlassPaneconsume()(默认情况下)MouseEvent 如果添加了一些 JComponent(s),GlassPane 可以覆盖整个 RootPane 或仅可用 Rectangle 的一部分,取决于使用的 LayoutManagerDimension 从 layed JComponent(s)

  • 返回

关于java - 如何在 JScrollPane 之上绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16741658/

相关文章:

java - 如何刷新 JPanel?

java |如何在 "forever"循环运行时关闭 JFrame?

java - Swing - 在我的程序中组织 JFrames(或 JDialogs???)

Java - Mac 上的屏幕尺寸

java - Jack Shirazi DoubleToString java优化问题

java - 为什么我的密码与编码的密码不匹配?

java - 整个JFrame中的JTextField而不是我确定的Area

java - 为什么当 BigDecimal 应该适合有效数字时,除法会导致舍入?

java - 如何在 NetBeans GUI Builder 中包含自定义面板?

java - Swing:将功能键 (F2) 设置为加速器