|
What this is
Other links
The source code/* * $Id: FunnyBracketsPopup.java,v 1.1 2003/02/14 01:02:39 gfx Exp $ * * Funny Brackets Plugin for Jext * * Copyright (C) 2002 Nicolas Thouvenin * touv at yahoo dot fr * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.event.*; import org.jext.*; import org.jext.gui.*; public class FunnyBracketsPopup extends JWindow implements CaretListener { private JextFrame parent; private JextTextArea textArea; public FunnyBracketsPopup(JextFrame parent, String word) { super(parent); this.parent = parent; this.textArea = parent.getTextArea(); JPanel pane = new JPanel(); pane.setLayout(new BorderLayout()); Font font = new Font("Monospaced", Font.PLAIN, 11); JLabel label = new JLabel(word); label.setFont(font); label.setOpaque(true); label.setBackground(Color.yellow); pane.add(label, BorderLayout.CENTER); pane.setBorder(LineBorder.createBlackLineBorder()); getContentPane().add(pane); GUIUtilities.requestFocus(this, label); pack(); int offset = textArea.getCaretPosition(); int line = textArea.getCaretLine(); int x = textArea.offsetToX(line, offset-textArea.getLineStartOffset(line)); Dimension parentSize = parent.getSize(); Point parentLocation = parent.getLocationOnScreen(); Insets parentInsets = parent.getInsets(); Point tapLocation = textArea.getLocationOnScreen(); Dimension popupSize = getSize(); x += tapLocation.x; if ((x + popupSize.width) > (parentLocation.x + parentSize.width - parentInsets.right)) { x -= popupSize.width; } FontMetrics fm = getFontMetrics(font); setLocation(x, tapLocation.y + textArea.lineToY(line) - fm.getHeight() - fm.getLeading()); setVisible(true); MouseHandler mHandler = new MouseHandler(); addMouseListener(mHandler); textArea.addMouseListener(mHandler); KeyHandler kHandler = new KeyHandler(); addKeyListener(kHandler); parent.setKeyEventInterceptor(kHandler); textArea.addCaretListener(this); } public void dispose() { parent.setKeyEventInterceptor(null); textArea.removeCaretListener(this); super.dispose(); SwingUtilities.invokeLater(new Runnable() { public void run() { textArea.requestFocus(); } }); } public void caretUpdate(CaretEvent evt) { dispose(); } class KeyHandler extends KeyAdapter { public void keyPressed(KeyEvent evt) { // Dés que l'on appuie sur une touche on nique le popup dispose(); // est fait suivre l'action ... parent.processKeyEvent(evt); } } class MouseHandler extends MouseAdapter { public void mouseClicked(MouseEvent me) { dispose(); } } protected void finalize() throws Throwable { super.finalize(); parent = null; textArea = null; } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.