IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

[ImageJ / plot] Recupérer les coordonnées de la sélection sur un plot


Sujet :

Interfaces Graphiques en Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Points : 8
    Points
    8
    Par défaut [ImageJ / plot] Recupérer les coordonnées de la sélection sur un plot
    Bonjour,

    Je suis en train de développer un plug-in ImageJ (donc en java) et j'ai créé un plot à partir d'une JTable.
    J'aimerai pouvoir sélectionner sur la fenêtre du plot une région et que grâce aux coordonnées X/Y, les lignes correspondantes sur mon tableau se sélectionnent

    J'ai déjà ajouté un mouseReleased en listener, mais je ne sais pas comment récupérer les coordonnées X/Y sachant que le plot s'effectue dans une fenêtre avec des bordures et il faut les prendre en compte dans le calcule des coordonnées. Sur la fenêtre de base, il y a un rappel des coordonnées actuel de la souris, mais aucun moyen (à ma connaissance) de récupérer ces valeurs

    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
    public void plotListener(ImageProcessor ip) {
    		if(WindowManager.getImage("Plot")!=null){
    			ImagePlus img=IJ.getImage();
    			final ImageCanvas canvas;
    			Vector images = new Vector();
    			Integer id = new Integer(img.getID());
    			if (images.contains(id)) {
    				// IJ.log("Already listening to this image");
    				return;
    			} else {
    				ImageWindow win = img.getWindow();
    				canvas = win.getCanvas();
    				canvas.addMouseListener(new MouseListener(){
     
    					@Override
    					public void mouseClicked(MouseEvent e) {
     
    					}
     
    					@Override
    					public void mousePressed(MouseEvent e) {
    					}
     
    					@Override
    					public void mouseReleased(MouseEvent e) {
     
    					}
     
    					@Override
    					public void mouseEntered(MouseEvent e) {
     
    						//IJ.log("mouseEntered ");
    						//IJ.log("selectedParticules");
    					}
     
    					@Override
    					public void mouseExited(MouseEvent e) {
    					}
    				});	
    				images.addElement(id);
    			}
    		}
    	}
    Mon tableau :
    Nom : Sans titre.jpg
Affichages : 1085
Taille : 152,6 Ko

    Mon plot avec ma souris sur les coordonnées indiquées :
    Nom : Sans titre2.jpg
Affichages : 943
Taille : 64,5 Ko

    Je cherche juste un moyen de récupérer ces coordonnées (Pour sélectionner les lignes dans le tableau et faire passer les points bleu en rouge par exemple)

    Merci à tous ! !

    Zénome

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Points : 8
    Points
    8
    Par défaut [JFreeChart]
    Bonjour,

    J'ai l'impression que personne ne connait ImageJ et son plot du coup j'ai recommencé avec un JFreeChart !

    J'obtient le meme genre de résultat :


    Nom : Capture d’écran 2015-07-06 à 16.09.24.png
Affichages : 983
Taille : 59,5 Ko

    Avec le code suivant :

    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
    package analysisResults;
     
    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Shape;
    import java.awt.geom.Ellipse2D;
    import java.awt.geom.Rectangle2D;
     
    import org.jfree.chart.ChartFactory; 
    import org.jfree.chart.ChartPanel; 
    import org.jfree.chart.JFreeChart; 
    import org.jfree.chart.plot.PlotOrientation; 
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.renderer.xy.XYShapeRenderer;
    import org.jfree.data.xy.XYSeries; 
    import org.jfree.data.xy.XYSeriesCollection; 
    import org.jfree.ui.ApplicationFrame; 
     
    public class PlotFrame extends ApplicationFrame { 
     
    	public static XYSeries series1;
    	public static XYSeries series2;
    	public static XYSeriesCollection dataset;
    	public JFreeChart chart;
    	public static ChartPanel chartPanel;
    	public static XYPlot plot;
    	public static XYShapeRenderer renderer;
    	public double size;
    	public double delta;
    	public static Shape shape1, shape2; 
    	public static float[] backUpData1, backUpData2;
     
    	public PlotFrame(String title, float[] dataCol1, float[] dataCol2, String header1, String header2) { 
     
    		super(title); 
     
    		setDefaultCloseOperation(ApplicationFrame.DISPOSE_ON_CLOSE);
     
    		backUpData1=dataCol1;
    		backUpData2=dataCol2;
     
    		dataset = new XYSeriesCollection(); 
     
    		series1 = new XYSeries("Value"); 
    		for(int i=0; i<dataCol1.length; i++){
    			series1.add(dataCol1[i], dataCol2[i]); 
    		}
    		dataset.addSeries(series1); 
     
    		chart = ChartFactory.createScatterPlot( 
    				title, // title 
    				header1, header2, // axis labels 
    				dataset, // dataset 
    				PlotOrientation.VERTICAL, 
    				true, // legend? yes 
    				true, // tooltips? yes  
    				false // URLs? no 
    				); 
     
    		chartPanel = new ChartPanel(chart); 
    		chartPanel.setPreferredSize(new java.awt.Dimension(500, 270)); 
    		setContentPane(chartPanel); 
     
    		plot = chart.getXYPlot( );
    		renderer = new XYShapeRenderer( );
    		size = 5.0;
    		delta = size / 2.0;
    		shape2 = new Rectangle2D.Double(-delta, -delta, size, size);
    		shape1 = new Ellipse2D.Double(-delta, -delta, size, size);
    		renderer.setSeriesPaint( 0 , Color.BLUE );
    		renderer.setSeriesShape(0, shape1);
    		renderer.setSeriesStroke( 0 , new BasicStroke( 4.0f ) );
    		plot.setRenderer( renderer ); 
    		setContentPane( chartPanel ); 
     
    	} 
    	public static void makeSelection(float[] dataSelect1, float[] dataSelect2){
    		//clear the previous datas
    		if(dataset.getSeriesCount()>1){
    			dataset.removeSeries(1);
    		}
    		dataset.removeSeries(0);
     
    		//create in first the selection serie, because the second serie is hidden by the first
    		series2 = new XYSeries("Selection");
    		for(int i=0; i<dataSelect1.length; i++){
    			series2.add(dataSelect1[i], dataSelect2[i]);
    					}
    		//define shape and color of the serie
    		renderer.setSeriesPaint( 0 , Color.RED );
    		renderer.setSeriesShape(0, shape2);
    		renderer.setSeriesStroke( 0 , new BasicStroke( 4.0f ) );
    		dataset.addSeries(series2); 
     
    		//re-create the first serie and add it in second
    		series1 = new XYSeries("Value"); 
    		for(int i=0; i<backUpData1.length; i++){
    			series1.add(backUpData1[i], backUpData2[i]); 
    		}
    		renderer.setSeriesPaint( 1 , Color.BLUE );
    		renderer.setSeriesShape(1, shape1);
    		renderer.setSeriesStroke(1 , new BasicStroke( 4.0f ) );
     
    		dataset.addSeries(series1); 
     
    		plot.setRenderer( renderer ); 
    	}
     
     
     
    }

    Maintenant, j'aimerai ajouter un Listener sur cette Frame afin d'obtenir les points présents dans la sélection ... Sachant qu'actuellement lorsque je sélectionne quelque chose, la JFreeChart zoom sur ma sélection.

    Est-ce que c'est possible ? Des idées ?
    Merci en tout cas

    Zénome

    EDIT : Bug annexe, lorsque je ferme ma fenêtre de plot, tout le programme s'arrête plutôt qu'uniquement la fenêtre, et ce, malgré le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setDefaultCloseOperation(ApplicationFrame.DISPOSE_ON_CLOSE);

Discussions similaires

  1. Trouver les coordonnées d'un point sur une surface NURBS
    Par oodini dans le forum Mathématiques
    Réponses: 2
    Dernier message: 25/05/2011, 18h35
  2. [GeoTools] Recupérer les coordonnées lors d'un highlight
    Par Rcanada dans le forum SIG : Système d'information Géographique
    Réponses: 0
    Dernier message: 15/03/2009, 13h12
  3. listview : Recupérer les coordonnées d'une cellule
    Par gritchou dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/05/2008, 19h22
  4. Détermination des coordonnées d'un point sur un plot
    Par Contractofoued dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 11/10/2007, 11h46
  5. Réponses: 4
    Dernier message: 27/11/2006, 18h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo