Bonsoir,
Après tant de recherche je m'adresse a vous cher amis pour une aide précieuse. Je suis entrain de coder une application a l'aide de la librairie ICEPDF (librairie aidant à lire dans un viewer un pdf et de pouvoir faire des modifications dessus) pour l'instant j'ai pu intégrer le viewer et de mettre au dessus un panel à l'aide d'un JLayeredPane (vu que les actions marchent pas ur le panel du viewer) ainsi pouvoir ajouter par exemple un commentaire au pdf (JTextArea- c'est en gros les annotations) que je peux déplacer mais uniquement sur le panel au dessus du panel contenant le viewer mais en scrollant ce dernier le JTextArea suit le scrollbar. Si c'est possible d'avoir une aide pour résoudre mon problème, je suis dessus depuis 2 jours et je trouve pas de solution ou sinon une autre manière de m'y prendre.Voici le code

Class PDFJframe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
package com.pdfapp.QHG;
 
import java.awt.BorderLayout;
import java.awt.Color;
 
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.WindowConstants;
 
import org.icepdf.ri.common.ComponentKeyBinding;
import org.icepdf.ri.common.SwingController;
 
 
public class PDFJFrame{
 
	static JFrame frame;
	static SwingController m_controller;
	static JPanel m_viewerComponentPanel;
	private JLayeredPane lpane = new JLayeredPane();
	static DragProxyPane ppane = new DragProxyPane();
    static JPanel panelDraw = new JPanel();
 
    public PDFJFrame() {
 
		/* Création des composants */
    	frame = new JFrame("PDF Viewer Application");
    	PDFActions mouse = new PDFActions("souligner");
 
    	/* Ajout du Controller et Viewer ICEPDF */
        m_controller = new SwingController();
        m_controller.setIsEmbeddedComponent(true);
        com.pdfapp.QHG.SwingViewBuilder m_factory = new SwingViewBuilder(m_controller);
        m_viewerComponentPanel = new JPanel();
 
        /* add copy keyboard command */
        m_viewerComponentPanel = m_factory.buildViewerPanel();
        ComponentKeyBinding.install(m_controller, m_viewerComponentPanel);
 
        /* Ajout du  via callback */
        m_controller.getDocumentViewController().setAnnotationCallback(
        new org.icepdf.ri.common.MyAnnotationCallback(
        m_controller.getDocumentViewController()));
 
		/* Ajouter la bar du menu ainsi que la toolbar à la frame */
		PDFMenuBar menu_bar = new PDFMenuBar();
		PDFToolBar tool_bar = new PDFToolBar();
		frame.setJMenuBar(menu_bar);
		frame.add(tool_bar, BorderLayout.NORTH);
 
		/* Ajout du JPanel contenant le Viewer au Frame */
		//frame.addWindowListener(m_controller);
 
        lpane.setBounds(0, 0, 800, 500);
        m_viewerComponentPanel.setBounds(0, 0, 800, 500);
        m_viewerComponentPanel.setOpaque(true);
        ppane.setBounds(0, 0, 800, 500);
        ppane.setOpaque(false);
        lpane.add(m_viewerComponentPanel, new Integer(0), 0);
        lpane.add(ppane, new Integer(1), 0);
        frame.add(lpane);
 
        frame.setSize(810, 600);
        frame.setUndecorated(true);
        frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
        frame.setLocation(300,50);
		frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		frame.setResizable(false);
		frame.setVisible(true);
	}
 
}
Class PDFActions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package com.pdfapp.QHG;
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
 
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
 
 
class PDFActions implements ActionListener, MouseListener{
	static boolean isPressed = false;
    private String m_name;
 
    public PDFActions(String name) {
	       this.m_name = name;
	}
 
 
	@SuppressWarnings("static-access")
	@Override
    public void actionPerformed(ActionEvent e) {
		switch (m_name) {
            case "Ouvrir":
            	PDFFilter m_pdffilter = new PDFFilter();
            	JFileChooser fc = new JFileChooser();
            	int result = fc.showOpenDialog(com.pdfapp.QHG.PDFJFrame.frame);
            	if (result == JFileChooser.APPROVE_OPTION) {
            		File selectedFile = fc.getSelectedFile();
            		if( m_pdffilter.accept(selectedFile)){
        				com.pdfapp.QHG.PDFJFrame.m_controller.openDocument(selectedFile.getAbsolutePath());
        				com.pdfapp.QHG.PDFToolBar.cb.setEnabled(true);
        				com.pdfapp.QHG.PDFToolBar.button2.setEnabled(true);
        				com.pdfapp.QHG.PDFToolBar.button5.setEnabled(true);
        				com.pdfapp.QHG.PDFToolBar.button6.setEnabled(true);
        				com.pdfapp.QHG.PDFToolBar.button7.setEnabled(true);
        				com.pdfapp.QHG.PDFToolBar.button8.setEnabled(true);
        				com.pdfapp.QHG.PDFToolBar.button9.setEnabled(true);
            	}else {
        			JOptionPane jop1;      
        			jop1 = new JOptionPane();
        			ImageIcon img = new ImageIcon(getClass().getClassLoader().getResource("resources/Icons/error.png"));
        			jop1.showMessageDialog(null, "Le format du fichier que vous essayez d’ouvrir, " +selectedFile.getName()+ " est différent de l'extension .pdf !", "Erreur", JOptionPane.ERROR_MESSAGE, img);  
        		}
        	} else {
        		System.out.println("L'ouverture est annulée\n");
 
        }	
 
                break;
            case "Save":
            	System.out.println("Save");
                break;
            case "SaveAs":
            	System.out.println("SaveAs");
                break;
            case "Drag":
 
 
            	break;
            case "comment":
            		com.pdfapp.QHG.PDFJFrame.ppane.addBox();
            	break;
            case "shape":
    	            //com.pdfapp.QHG.PDFJFrame.canvas.add();
 
            	break;
            case  "Quitter":
            	com.pdfapp.QHG.PDFJFrame.frame.dispose();
            	break;
        }
    }
 
 
 
	public void mouseClicked(MouseEvent e) {
		switch(m_name) {
		case "souligner":
	    int x=e.getX();
	    int y=e.getY();
	    System.out.println(x+","+y);//these co-ords are relative to the component
	    break;
 
		}
	}
 
 
	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub
 
	}
 
 
	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
 
	}
 
 
	@Override
	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub
 
	}
 
 
	@Override
	public void mouseReleased(MouseEvent event)
	{
 
	}
}
Class DragProxyPane:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
package com.pdfapp.QHG;
 
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
 
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.event.MouseInputAdapter;
 
class DragProxyPane extends JPanel {
    private static final long serialVersionUID = 1L;
    DragListener drag;
 
    public DragProxyPane() {
 
    }
 
    public void addBox() {
        drag = new DragListener();
        JTextArea textArea2 = new JTextArea("Votre Commentaire\nici");
        textArea2.setLineWrap(true);
        textArea2.setWrapStyleWord(true);
        add(textArea2);
        textArea2.addMouseListener(drag);
        textArea2.addMouseMotionListener(drag);
        repaint();
        revalidate();
    }
 
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
    }
 
    public class DragListener extends MouseInputAdapter {
        Point location;
        MouseEvent pressed;
 
        public void mousePressed(MouseEvent me) {
            pressed = me;
        }
 
        public void mouseDragged(MouseEvent me) {
            Component component = me.getComponent();
            location = component.getLocation(location);
            int x = location.x - pressed.getX() + me.getX();
            int y = location.y - pressed.getY() + me.getY();
            component.setLocation(x, y);
        }
    }
 
}
La classe ou y a le button pour dessiner le jtextarea est une class qui herite de JToolBar et il y a un bouton qui s'actionne et dessine le JtextField.
désolé si le code est désorienté je commence Java, donc soyez indulgent s'il vous plait!