Re: Drawing line on ImageIcon on panel after getting data
On Oct 25, 11:13 pm, "Andrew Thompson" <u32984@uwe> wrote:
bH wrote:
..
public class IconMapShoScale extends JPanel{
This example might have been an SSCCE except for:
a) line wrap, which had to be fixed before it compiled
b) lack of images locally.
For the first, you might try <http://www.physci.org/twc.jnlp>
This little tool shows the width of the source/text pasted
in the text area. I recommned limiting it to '62 chars' for
usenet posts.
For the second, try obtaining images that are small (in bytes),
but large enough (in width/height) to show the problem,
directly off the net. If you have a site of your own, upload
some examples to use, otherwise the code might get them
off another site.
Here is one image search..
<http://images.google.com.au/images?q=+filetype:jpg&as_st=y&svnum=10&h...
That search locates images that are 'small' in width/height.
As to the technical side of the problem, I suspect it is
non-optimal to create an ImageIcon. I would tend to use
a JPanel, override paintComponent and draw the Image
directly (Graphics.drawImage()). Once the points are
obtained, it is a simple matter to Graphics.drawLine()
(obviously, draw the lines *after* the image itself is drawn).
--
Andrew Thompsonhttp://www.athompson.info/andrew/
Message posted viahttp://www.javakb.com
Hi Andrew,
Thanks for the text width checker.
Taking your suggestions and making revisions using your suggestions,
This is supplied below.
bH
import javax.swing.*;
import java.awt.*;
import javax.swing.border.BevelBorder;
import java.awt.event.*;
import java.net.*;
/* Notes for use....
* Map scale enter number to be used; i.e. 600
* Click points requried
* [0] Click point Map Location of City 1
* [1] Click point Map Location of City 2
* [3] Click on the point Scale Chart at the 0 Minimum Value
* [4] Click on the point Scale Chart at the Maximum Value
*/
public class IconMapShoScaleImgs extends JFrame{
int deltaAddrX = 0;
int deltaAddrY = 0;
int points = 4;
int dataPointX[]= new int[points];
int dataPointY[]= new int[points];
int distanceResult = 0;
double distanceCalc = 0;
double deltaScaleX = 0;
int scale = 0;
Point clickPoint = null;
int ptCounter = 0;
JPanel infoPanel = new JPanel();
JLabel scaleLbl = new JLabel("Show Scale Larger NUMBER Used");
JLabel distLbl = new JLabel("After 4 Clicks The mi/km Between Points
Are");
JTextField scaleFld;
JTextField mileFld;
// Constructor
public IconMapShoScaleImgs() {
super("Distances Calculated by Click Points on Map");
this.setLayout(new BorderLayout());
Image img = null ;
try
{
img = java.awt.Toolkit.getDefaultToolkit().
getDefaultToolkit().createImage(new
URL("http://www.lib.utexas.edu/maps/cia07/
australia_sm_2007.gif" ));
// utexas.edu: good site for maps with other scale charts
} catch (Exception e)
{
e.printStackTrace( System.out ) ;
}
JLabel label = new JLabel(new ImageIcon(img) ) ;
getContentPane().setSize(400,400);
getContentPane().add( label ) ;
BevelBorder loweredBevelBorder = (BevelBorder)BorderFactory.
createLoweredBevelBorder();
this.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent event){
clickPoint = event.getPoint();
dataPointX[ptCounter] = clickPoint.x;
dataPointY[ptCounter] = clickPoint.y;
repaint();
ptCounter++;
if (ptCounter > 3){
//taking it in steps first between two cities.
deltaAddrX = dataPointX[1] - dataPointX[0];
deltaAddrY = dataPointY[1] - dataPointY[0];
distanceCalc = Math.pow(((deltaAddrX * deltaAddrX) +
(deltaAddrY * deltaAddrY)), 0.5);
//From the scale chart is horizontal .. Y is not needed
double deltaScaleX = Math.abs(dataPointX[3] -
dataPointX[2]);
scale = (int)(Double.parseDouble(scaleFld.getText()));
distanceCalc = distanceCalc/deltaScaleX * scale;
distanceResult = (int)distanceCalc;
mileFld.setText(String.valueOf(distanceResult));
// making possible other measurements from the same map
deltaScaleX = 0;
distanceCalc = 0;
ptCounter = 0;
}
}
}
);
// infoPanel re: map scale, resultant of clicks measure.
this.add(infoPanel, BorderLayout.SOUTH);
infoPanel.add(scaleLbl);
scaleFld = new JTextField(6);
infoPanel.add(scaleFld);
infoPanel.add(distLbl);
mileFld = new JTextField(6);
infoPanel.add(mileFld);
pack() ;
setLocationRelativeTo(null) ;
setVisible(true);
}
public void paint(Graphics g){
super.paint(g);
if (ptCounter > 1){
g.setColor(Color.red);
g.drawLine(dataPointX[0],dataPointY[0],dataPointX[1],dataPointY[1]);
}
}
public static void main(String[] args) {
IconMapShoScaleImgs IconMapShoScaleImgs1 = new
IconMapShoScaleImgs();
}
}