JLayeredPane et setTransform, comportement étrange
Bonjour.
Je dessine dans un JPanel et j'aimerais pouvoir faire passer des JInternalFrame par dessus ce dessin. Mais il semblerait que Graphics2D setTransform pose des soucis. Lorsque j'assigne une AffineTransform j'ai des trainées lorsque je déplace la JInternalFrame par dessus le JPanel.
Voici le code qui expose le problème :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
import javax.swing.*;
import java.awt.*;
import java.awt.geom.AffineTransform;
public class RootLayeredPaneDemo extends JPanel
{
public RootLayeredPaneDemo(JLayeredPane layeredPane)
{
JInternalFrame dummyTest = new JInternalFrame();
dummyTest.setSize(100, 100);
dummyTest.setLocation(120, 100);
dummyTest.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
dummyTest.setVisible(true);
layeredPane.add(dummyTest, 1);
IMGPanel panel = new IMGPanel(false);
panel.setSize(100, 100);
panel.setLocation(0, 0);
layeredPane.add(panel, 0);
IMGPanel panel2 = new IMGPanel(true);
panel2.setSize(100, 100);
panel2.setLocation(150, 0);
layeredPane.add(panel2, 0);
}
private class IMGPanel extends JPanel
{
boolean at;
public IMGPanel(boolean at)
{
this.at = at;
}
@Override
public void paintComponent(Graphics graphics)
{
Graphics2D g = (Graphics2D) graphics;
g.setColor(Color.red);
g.clearRect(0, 0, getWidth(), getHeight());
if (at)
g.setTransform(new AffineTransform());
g.drawLine(0, getHeight()/2, getWidth(), getHeight()/2);
g.drawLine(getWidth()/2, 0, getWidth()/2, getHeight());
}
}
private static void createAndShowGUI()
{
//Create and set up the window.
JFrame frame = new JFrame("RootLayeredPaneDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
RootLayeredPaneDemo newContentPane = new RootLayeredPaneDemo(
frame.getLayeredPane());
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.setSize(new Dimension(300, 350));
frame.setVisible(true);
}
public static void main(String[] args)
{
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
} |
Si on passe l'interalFrame sur le panel à gauche tout baigne mais sur celui de droite ça fait des trainées. :(
Merci d'avance.