【发布时间】:2011-08-28 17:57:46
【问题描述】:
我想显示 JList 中元素的工具提示。我为此使用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;
}
}
我的渲染器类:-
public class MyRender extends JPanel implements ListCellRenderer {
//--class vars
public MyRender(Atalk atalk) {
//--initialize class var
}
@Override
public JComponent getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
//-- put vales in class vars and add them in JPanel
setToolTipText(user.getName()+"<br/>"user.getAddress());
return null;
}
}
我声明列表的代码。
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]);
【问题讨论】:
-
你能在可见的 ViewPort 中确定 JList Item 的矩形吗(来自 JScrollPane)
-
@mKorbel:如何确定?
-
@Harry Joy:你看过我的回答了吗:)
-
@Damodar:是的,我做到了,但无法得到它。实际上,我知道所有这些事情,但我不知道如何将它们组合在一起以获得所需的结果。查看有问题的编辑。
-
嗯,也许(并把你最后的线程放在一起)会更好地为 JList 添加 MouseMotionListener(Couponds JComponents),然后寻找一些 RolloverSupport(确定什么 JComponets 在 MouseCursor 下)和工具提示文本的 HashMap ,而且这个 ToolTip 是非常非常非常奇怪的组件
标签: java swing location tooltip jlist