
Signature
Knute Johnson
email s/nospam/linux/
> A window without title bar probably cannot be resized.
boo ;) I thought this may be the case, what a shame thoughcould have
been a quick reasonable solution.
> OK so what you are really trying to do is to draw text on an image and
> you need the GUI part to accomplish that, yes?
Yes :)
> So you really will have a couple of problems to solve, first how to
> position the text on the image
I have an dear how to achieve this, if I make the dialog a listener to
the mouse, when I have focus of the coords text box on the dialog, I
could click a positon in the image and populate the coords text box from
the mouse coords yes?
and then how to get the text in the first
> place. Your idea of using a moveable/resizable text box probably won't
> work well as you want.
:( my ideas rarely do exactly as I had imagined.
Why not have the user select from a menu the
> option to draw text on the image, then draw a line box on the image as
> the placement area and make that box movable/resizable and pop up a
> dialog to enter the text into.
I am unfamiliar with a line box, I would still like to have the text
displayed before it is committed to the image.
As text is entered into the dialog you
> can draw it in the image box and you will be able to position it as
> well. I know that this sounds pretty complicated but I don't think it
> will really be that hard to do.
I oly really want to draw into the image just before saving, I really
want a place holder as you describe earlier for each piece of text, yes
there could be several pieces of text to render.
I already have he idea for multiple text boxes, I could use an arraylist
or similar and then iterate over it before saving to draw ach piece of text.
Thanks for your help so far
Rich
Knute Johnson - 20 Apr 2008 05:22 GMT
>> A window without title bar probably cannot be resized.
> boo ;) I thought this may be the case, what a shame thoughcould have
[quoted text clipped - 36 lines]
> Thanks for your help so far
> Rich
Here is a simple example of what I am suggesting. You can make
selections for color, font and size if you wanted too. This is similar
to the text box on the Gimp image program.
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
import javax.swing.event.*;
public class AddTextJComponent extends JComponent implements
ActionListener {
final BufferedImage image;
final JTextField tf = new JTextField(20);
final Rectangle rect;
final JDialog dialog;
boolean drawRect;
boolean moveFlag;
int startX,startY;
public AddTextJComponent() throws IOException {
image = ImageIO.read(new File("kittens.jpg"));
setPreferredSize(new Dimension(
image.getWidth(),image.getHeight()));
MouseInputAdapter mia = new MouseInputAdapter() {
public void mousePressed(MouseEvent me) {
Point p = new Point(me.getX(),me.getY());
if (rect.contains(p)) {
moveFlag = true;
startX = rect.x;
startY = rect.y;
}
}
public void mouseReleased(MouseEvent me) {
moveFlag = false;
dialog.toFront();
}
public void mouseDragged(MouseEvent me) {
if (moveFlag) {
rect.x = me.getX();
rect.y = me.getY();
repaint();
}
}
};
addMouseListener(mia);
addMouseMotionListener(mia);
DocumentListener dl = new DocumentListener() {
public void changedUpdate(DocumentEvent de) {
change(de);
}
public void insertUpdate(DocumentEvent de) {
change(de);
}
public void removeUpdate(DocumentEvent de) {
change(de);
}
void change(DocumentEvent de) {
repaint();
}
};
tf.getDocument().addDocumentListener(dl);
rect = new Rectangle();
dialog = new JDialog((Frame)getTopLevelAncestor(),
"Enter Text",false);
dialog.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
drawRect = false;
repaint();
}
});
dialog.add(tf);
dialog.pack();
}
public void actionPerformed(ActionEvent ae) {
drawRect = true;
dialog.setVisible(true);
}
public void paintComponent(Graphics g) {
g.drawImage(image,0,0,null);
g.setColor(Color.BLUE);
FontMetrics fm = g.getFontMetrics();
int textWidth = fm.stringWidth(tf.getText());
int textHeight = fm.getHeight();
g.drawString(tf.getText(),rect.x + 5,rect.y + textHeight);
// adjust the size of the rectangle for the amount of text
rect.setSize(new Dimension(textWidth + 10, textHeight + 10));
if (drawRect)
g.drawRect(rect.x,rect.y,rect.width,rect.height);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
AddTextJComponent comp = new AddTextJComponent();
f.add(comp);
JMenuBar mb = new JMenuBar();
f.setJMenuBar(mb);
JMenuItem m = new JMenuItem("Text");
mb.add(m);
m.addActionListener(comp);
f.pack();
f.setVisible(true);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
});
}
}

Signature
Knute Johnson
email s/nospam/linux/
------->>>>>>http://www.NewsDem
RichT - 20 Apr 2008 19:45 GMT
Thanks for this Knute,
pure brilliance :)
Rich
Knute Johnson - 20 Apr 2008 22:22 GMT
> Thanks for this Knute,
> pure brilliance :)
>
> Rich
There is a lot more that you can do with that. Use a JTextArea for
input to get multi-line text, put a CANCEL option on the dialog, use a
more complex color and line scheme for the display box so that it will
be visible on all colors of background image, make some sort of snap to
grid or centering option on the display box, store the text data
somewhere so that it can be undone, there's a million possibilities.

Signature
Knute Johnson
email s/nospam/linux/
------->>>>>>http://www.NewsDem
RichT - 20 Apr 2008 23:18 GMT
>> Thanks for this Knute,
>> pure brilliance :)
[quoted text clipped - 7 lines]
> grid or centering option on the display box, store the text data
> somewhere so that it can be undone, there's a million possibilities.
millions of possibilities? if I have told you once I have told you a
trillion time not to exaggerate :)
Seriously thanks for your help this is just the kick start I needed, now
I have a base to work with I can expand and have already done so today
Thanks Knute Johnson
Rich