Предполагается, что это будет улучшение @mamickr MarqueePanel. См. Выше.
Чтобы сопоставить события мыши с конкретными компонентами, добавленными в MarqueePanel
Переопределить add(Component comp)
MarqueePanel, чтобы направить все события мыши компонентов
Проблема в том, что делать с MouseEvents, выпущенным из отдельных компонентов. Мой подход состоит в том, чтобы удалить слушателей мыши из добавленных компонентов и позволить MarqueePanel перенаправить событие на правильный компонент.
В моем случае эти компоненты должны быть ссылками.
@Override
public Component add(Component comp) {
comp = super.add(comp);
if(comp instanceof MouseListener)
comp.removeMouseListener((MouseListener)comp);
comp.addMouseListener(this);
return comp;
}
Затем отобразите компонент x в MarqueePanel x и, наконец, верную компоненту
@Override
public void mouseClicked(MouseEvent e)
{
Component source = (Component)e.getSource();
int x = source.getX() + e.getX();
int y = source.getY();
MarqueePanel2 marqueePanel = (MarqueePanel2) ((JComponent)e.getSource()).getParent();
double x2 = marqueePanel.getWidth();
double x1 = Math.abs(marqueePanel.scrollOffset);
if(x >= x1 && x <= x2)
{
System.out.println("Bang " + x1);
Component componentAt = getComponentAt(x+marqueePanel.scrollOffset, y);
if(comp instanceof MouseListener)
((MouseListener) componentAt).mouseClicked(e);
System.out.println(componentAt.getName());
}
else
{
return;
}
//System.out.println(x);
}
Пробовали ли вы редактировать запись оболочки в настройках учетной записи .
Перейдите в настройки учетных записей, разблокируйте и щелкните правой кнопкой мыши свою учетную запись пользователя для Диалог дополнительных настроек . Ваша оболочка должна быть / bin / zsh, и вы можете соответствующим образом отредактировать этот вызов (т.е. добавить аргумент --login).
chsh -s $(which zsh)
Вы будете запрашивается пароль, но после обновления настроек для всех новых сеансов iTerm / Terminal, которые вы запускаете на этом компьютере, по умолчанию будет использоваться zsh.