
jive3.JTextTips Maven / Gradle / Ivy
The newest version!
package jive3;
import fr.esrf.tangoatk.widget.util.ATKGraphicsUtils;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
/**
* A TextEditor that display a popup with text suggestions
*/
class TipPopup implements MouseMotionListener,MouseListener {
String[] items;
JLabel text;
JScrollPane textView;
JTextTips parent;
Popup popup;
int hFont;
int selectedIdx = -1;
int[] globalIdx = null;
boolean visible = false;
String prefix;
int compWidth;
TipPopup(JTextTips parent) {
this.parent = parent;
text = new JLabel();
text.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));
text.setBackground(new Color(245, 245, 250));
text.setHorizontalAlignment(SwingConstants.LEFT);
text.setOpaque(true);
hFont = (int)(ATKGraphicsUtils.measureString("ABC",text.getFont()).getHeight()+0.5) + 1;
text.addMouseMotionListener(this);
text.addMouseListener(this);
textView = new JScrollPane(text);
textView.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
}
void setList(String[] items) {
this.items = items;
}
void down() {
if(visible && selectedIdx=0)
parent.setTextInternal(items[globalIdx[selectedIdx]]);
scrollToVisible();
}
}
void up() {
if(visible && selectedIdx>0) {
selectedIdx--;
buildText();
if(selectedIdx=0 && selectedIdx v = new Vector();
StringBuffer str = new StringBuffer();
str.append("\n");
str.append("\n");
str.append("\n");
for(int i=0;i"+prefix+""+items[i].substring(prefix.length())+"";
if(count==selectedIdx) {
str.append(""+it+" ");
} else {
str.append(""+it+" ");
}
v.add(i);
count++;
}
}
str.append("
\n");
str.append("\n");
str.append("\n");
text.setText(str.toString());
globalIdx = new int[v.size()];
for(int i=0;i0 );
}
public void setVisible(boolean visible) {
if(popup!=null)
popup.hide();
if(visible) {
Rectangle r = new Rectangle();
parent.getBounds(r);
compWidth = r.width;
int h = text.getPreferredSize().height+10;
if(h>150) h = 150;
textView.setPreferredSize(new Dimension(r.width,h));
Point p = parent.getLocationOnScreen();
popup = PopupFactory.getSharedInstance().getPopup(parent,textView,p.x,p.y+r.height);
popup.show();
}
this.visible = visible;
}
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
selectedIdx = e.getY()/hFont;
buildText();
}
public void mouseClicked(MouseEvent e) {
selectedIdx = e.getY()/hFont;
select();
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
public class JTextTips extends JTextField implements DocumentListener,KeyListener,FocusListener {
TipPopup popup;
boolean isRefreshing;
public JTextTips() {
isRefreshing = false;
popup = new TipPopup(this);
getDocument().addDocumentListener(this);
addKeyListener(this);
addFocusListener(this);
}
public void setTextInternal(String text) {
isRefreshing = true;
setText(text);
isRefreshing = false;
}
public void setTips(String[] list) {
popup.setList(list);
}
public void insertUpdate(DocumentEvent e) {
if(!isRefreshing) popup.updateText();
}
public void removeUpdate(DocumentEvent e) {
if(!isRefreshing) popup.updateText();
}
public void changedUpdate(DocumentEvent e) {
}
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_DOWN)
popup.down();
if(e.getKeyCode()==KeyEvent.VK_UP)
popup.up();
if(e.getKeyCode()==KeyEvent.VK_ENTER)
popup.select();
}
public void keyReleased(KeyEvent e) {
}
public void focusGained(FocusEvent e) {
}
public void focusLost(FocusEvent e) {
popup.setVisible(false);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy