1

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);
    }

}
4

4 に答える 4

3

JPanel のペイントを JScrollPane のペイントの上に重ねたい

あなたはにペイントすることができます

  • ここここで見ることができるJViewport

  • JXlayer(Java6)ベースのJLayer(Java7)を使用

  • 非常に類似した (今日の JLayer のように) にペイントし、 (デフォルトで)いくつか追加されている場合にGlassPane注意GlassPaneし、使用可能な Rectangle の全体または一部のみをカバーすることができ、使用に依存し、layed から戻ります( s) consume()MouseEventJComponentGlassPaneRootPaneLayoutManagerDimensionJComponent

于 2013-05-24T19:14:46.463 に答える
0

単一のコンポーネントを に追加してBorderLayoutを指定するBorderLayout.CENTERと、コンポーネントはその親を完全に埋めるように展開されます。コンポーネントが不透明な場合、親で行っているカスタム ペイントは表示されません。

于 2013-05-24T18:50:35.393 に答える
0

簡単な問題です。あなたが描いているものを隠しているカスタムパネルにスクロールペインを追加しています。代わりに、コンテンツとして cutsompanel を使用してスクロールペインを初期化することを検討してください。

例:

JScrollPane scrlPane = new JScrollPane(customPanel);
于 2013-05-24T18:48:34.290 に答える
0

(@mKorbelが示唆したように)うまくいった方法は、JViewportで遊ぶことです:

scroll.setViewport(new CustomViewPort());

whereは、メソッドをオーバーライドするCustomViewPort拡張クラスです。JViewportpaintComponent

于 2013-05-24T19:12:21.523 に答える