Java swing中的工具提示位置
我想显示JList中元素的工具提示。我使用Java swing中的工具提示位置,java,swing,location,tooltip,jlist,Java,Swing,Location,Tooltip,Jlist,我想显示JList中元素的工具提示。我使用setToolTipText(str)来实现这一点。我想要的是工具提示应该显示在该元素的右侧。我使用了getToolTipLocation(mouseEvent),但无法得到期望的结果。我该怎么做 更新 我的列表类:- public class MyList extends JList { private static final long serialVersionUID = 2170990919011800182L; Defau
setToolTipText(str)
来实现这一点。我想要的是工具提示应该显示在该元素的右侧。我使用了getToolTipLocation(mouseEvent)
,但无法得到期望的结果。我该怎么做
更新 我的列表类:-
public class MyList extends JList {
private static final long serialVersionUID = 2170990919011800182L;
DefaultListModel model;
public MyList(DefaultListModel model){
super(model);
this.model = model;
}
public Point getToolTipLocation(MouseEvent e) {
return new Point(75, locationToIndex(e.getPoint()));
}
@Override
public int getNextMatch(String prefix, int startIndex, Position.Bias bias) {
if (prefix == null)
throw new IllegalArgumentException("'prefix' must not be"
+ " null.");
if (startIndex < 0)
throw new IllegalArgumentException("'startIndex' must not"
+ " be less than zero.");
if (startIndex >= model.getSize())
throw new IllegalArgumentException("'startIndex' must not"
+ " be greater than the number of"
+ " elements.");
int result = -1;
int current = startIndex;
int delta = -1;
int itemCount = model.getSize();
boolean finished = false;
prefix = prefix.toUpperCase();
if (bias == Position.Bias.Forward)
delta = 1;
while (!finished)
{
String itemStr = ((User) model.getElementAt(current)).getName().toString().toUpperCase();
if (itemStr.indexOf(prefix)!=-1)
return current;
current = (current + delta);
if (current == -1)
current += itemCount;
else
current = current % itemCount;
if(current == 0)
finished = true;
else
finished = current == startIndex;
}
return result;
}
}
当你有问题的时候,发你的邮件。两行代码并没有告诉我们你在做什么
以下是一个简单的SSCCE:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ListToolTip extends JFrame
{
public ListToolTip()
{
DefaultListModel model = new DefaultListModel();
model.addElement("one");
model.addElement("two");
model.addElement("three");
model.addElement("four");
model.addElement("five");
model.addElement("six");
model.addElement("seven");
model.addElement("eight");
model.addElement("nine");
model.addElement("ten");
JList list = new JList( model )
{
public String getToolTipText( MouseEvent e )
{
int row = locationToIndex( e.getPoint() );
Object o = getModel().getElementAt(row);
return o.toString();
}
public Point getToolTipLocation(MouseEvent e)
{
int row = locationToIndex( e.getPoint() );
Rectangle r = getCellBounds(row, row);
return new Point(r.width, r.y);
}
};
JScrollPane scrollPane = new JScrollPane( list );
getContentPane().add( scrollPane );
}
public static void main(String[] args)
{
ListToolTip frame = new ListToolTip();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.setSize(400, 100);
frame.setVisible( true );
}
}
您是否能够在可见视口中确定JList项的矩形(从JScrollPane)@mKorbel:如何确定?@Harry Joy:您是否查看了我的答案:)@Damodar:是的,但无法获取。事实上,我知道所有这些事情,但我不知道如何将它们组合在一起,以获得期望的结果。请参阅edit in question.hmmm,也许(并将您最后的线程放在一起)最好为JList(Couponds JComponents)添加MouseMotionListener,然后为工具提示的文本查找一些RolloversSupport(确定MouseCorsor下的JComponents)和HashMap,而此工具提示非常奇怪Component@Harry快乐你看过我的评论了吗?您尚未发布SSCCE。你的更新对我来说毫无意义。我给了你工作代码。如果它不能完全满足您的需求,那么可以定制它以满足您的需求。
JList[] list = new JList[5];
DefaultListModel[] model = new DefaultListModel[5];
model[0] = new DefaultListModel();
list[0] = new MyList(model[0]);
model[1] = new DefaultListModel();
list[1] = new MyList(model[0]);
model[2] = new DefaultListModel();
list[2] = new MyList(model[0]);
model[3] = new DefaultListModel();
list[3] = new MyList(model[0]);
model[4] = new DefaultListModel();
list[4] = new MyList(model[0]);
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ListToolTip extends JFrame
{
public ListToolTip()
{
DefaultListModel model = new DefaultListModel();
model.addElement("one");
model.addElement("two");
model.addElement("three");
model.addElement("four");
model.addElement("five");
model.addElement("six");
model.addElement("seven");
model.addElement("eight");
model.addElement("nine");
model.addElement("ten");
JList list = new JList( model )
{
public String getToolTipText( MouseEvent e )
{
int row = locationToIndex( e.getPoint() );
Object o = getModel().getElementAt(row);
return o.toString();
}
public Point getToolTipLocation(MouseEvent e)
{
int row = locationToIndex( e.getPoint() );
Rectangle r = getCellBounds(row, row);
return new Point(r.width, r.y);
}
};
JScrollPane scrollPane = new JScrollPane( list );
getContentPane().add( scrollPane );
}
public static void main(String[] args)
{
ListToolTip frame = new ListToolTip();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.setSize(400, 100);
frame.setVisible( true );
}
}