Java awt.canvas не обрезается внутри JScrollPane - PullRequest
2 голосов
/ 08 декабря 2011

У меня есть JScrollPane с JPanel в его окне просмотра, несколько меньших JPanels внутри этого и awt.Canvas в каждом из самых внутренних JPanels.пересекает границы JScrollPane, холст рисует вне границы;на экране за пределами области JScrollPane.

Я бы ожидал, что холст будет обрезан автоматически, но, очевидно, это не так.Нужно ли вручную устанавливать обрезку или есть другой способ автоматической обрезки холста на границах JScrollPane?

1 Ответ

3 голосов
/ 08 декабря 2011

начиная с начиная с JDK 6, обновление 12 и JDK7, сборка 19, релизы Я бы по-прежнему предлагал не смешивать AWT и компоненты Swing вместе, без наиболее важных причин

возможно, возможновоспроизвести это с помощью этого кода

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

public class AwtSwing {

    private JPanel panel = new JPanel(new GridLayout(8, 8, 10, 10));

    public AwtSwing() {
        for (int i = 0; i < 36; i++) {
            Canvas cnv = new Canvas();
            JPanel panelInner = new JPanel(new BorderLayout());
            panelInner.add(cnv, BorderLayout.CENTER);
            panel.add(panelInner);
        }
        JFrame f = new JFrame("JTableExample");
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.add(new JScrollPane(panel), BorderLayout.CENTER);
        f.pack();
        f.setLocation(150, 150);
        f.setVisible(true);
    }

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

            public void run() {
                AwtSwing awtSwing = new AwtSwing();
            }
        });
    }
}
...