java - 如何将自定义工具提示添加到 JtextField?
问题描述
抱歉我的英语不好,我目前正在为一家公司开发应用程序,我希望能够指示要在 JtextFields 中输入的信息,但问题是这个指示有时很长,所以我找到了一个类一个工具提示自定义,它允许转到工具提示文本中的行,但我找不到如何将其添加到我的文本字段中。我试试这段代码:
JMultiLineToolTip mltt = new JMultiLineToolTip();
mltt.setTipText("Write an extention or anything you want, if the string apeare in file's name,\n the file will be added in result ");
textField = new JTextField();
textField.setBounds(134, 104, 210, 20);
textField.setColumns(10);
textField.add(mltt);
//textField.setToolTipText("Write an extention or anything you want, if the string apeare in file's name,\n the file will be added in result ");
request.add(textField);
这里是 JMultiLineToolTip 的代码
public class JMultiLineToolTip extends JToolTip {
private static final long serialVersionUID = 7813662474312183098L;
public JMultiLineToolTip() {
updateUI();
}
public void updateUI() {
setUI(MultiLineToolTipUI.createUI(this));
}
public void setColumns(int columns) {
this.columns = columns;
this.fixedwidth = 0;
}
public int getColumns() {
return columns;
}
public void setFixedWidth(int width) {
this.fixedwidth = width;
this.columns = 0;
}
public int getFixedWidth() {
return fixedwidth;
}
protected int columns = 0;
protected int fixedwidth = 0;
}
class MultiLineToolTipUI extends BasicToolTipUI {
static MultiLineToolTipUI sharedInstance = new MultiLineToolTipUI();
Font smallFont;
static JToolTip tip;
protected CellRendererPane rendererPane;
private static JTextArea textArea;
public static ComponentUI createUI(JComponent c) {
return sharedInstance;
}
public MultiLineToolTipUI() {
super();
}
public void installUI(JComponent c) {
super.installUI(c);
tip = (JToolTip) c;
rendererPane = new CellRendererPane();
c.add(rendererPane);
}
public void uninstallUI(JComponent c) {
super.uninstallUI(c);
c.remove(rendererPane);
rendererPane = null;
}
public void paint(Graphics g, JComponent c) {
Dimension size = c.getSize();
textArea.setBackground(c.getBackground());
rendererPane.paintComponent(g, textArea, c, 1, 1, size.width - 1, size.height - 1, true);
}
public Dimension getPreferredSize(JComponent c) {
String tipText = ((JToolTip) c).getTipText();
if (tipText == null) return new Dimension(0, 0);
textArea = new JTextArea(tipText);
rendererPane.removeAll();
rendererPane.add(textArea);
textArea.setWrapStyleWord(true);
int width = ((JMultiLineToolTip) c).getFixedWidth();
int columns = ((JMultiLineToolTip) c).getColumns();
if (columns > 0) {
textArea.setColumns(columns);
textArea.setSize(0, 0);
textArea.setLineWrap(true);
textArea.setSize(textArea.getPreferredSize());
} else if (width > 0) {
textArea.setLineWrap(true);
Dimension d = textArea.getPreferredSize();
d.width = width;
d.height++;
textArea.setSize(d);
} else
textArea.setLineWrap(false);
Dimension dim = textArea.getPreferredSize();
dim.height += 1;
dim.width += 1;
return dim;
}
public Dimension getMinimumSize(JComponent c) {
return getPreferredSize(c);
}
public Dimension getMaximumSize(JComponent c) {
return getPreferredSize(c);
}
解决方案
假设您从Yoshiko-app获取此代码,则在同一个github上有示例:
String pathTip = "Sets the tmp path.";
JPanel pathPanel = new JPanel() {
private static final long serialVersionUID = 1L;
public JToolTip createToolTip() {
return new JMultiLineToolTip();
}
};
pathPanel.setLayout(new BorderLayout());
pathPanel.setToolTipText(pathTip);
您只需要为 JtextField 调整此代码
推荐阅读
- javascript - 我想选择 2 个不同的输入(单选按钮)并划分它们的值并将结果显示为警报
- python - 如何让我的冒泡排序算法遍历数组中的所有条目?
- vue.js - 通过在 Vue 中输入数字来立即更改表格的列和行
- mysql - 从具有连接和空值的 4 个表中计数
- xamarin - 如何保存类似列表视图的数组?
- flutter - “where”参数中带有变量的 Firebase 实例
- firebase - 如何将firebase收集数据添加到flutter中的对象列表?
- flutter - 颤振构造函数参数可选不恒定
- c++ - cmake:如何将变量列表(来自集合)传递给代码
- javascript - 单击链接或按钮时关闭汉堡菜单