Adicionar componente customizado na paleta do eclipse

Criei uma classe que se extende a JToggleButton, e quero criar e adicionar um novo componente desta classe a paleta do eclipse. Eu tentei gerar um JAR File e adicionar pelo Palette Manager, ele até adiciona o ‘JToggleButton’ personalizado à paleta, porém quando tento adicionar clicando no componente e inserindo no formulário ele gera a seguinte mensagem:

Eu consegui solucionar isto. O problema era que os ícones utilizados para a criação do componente não foram adicionados na criação do JAR. E estava usando a classe dentro do próprio projeto, logo quando apagasse ela do projeto iria aparecer erros referentes a inexistência da classe, então adicionei o JAR no Build Path e funcionou!
O resultado foi este:

Vou deixar o código da classe do componente em outra resposta juntamente com as duas imagens necessárias para a criação do componente, para quem tiver interesse de implementar isto.

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.ImageIcon;
import javax.swing.JToggleButton;

public class OnOffButton extends JToggleButton implements ActionListener, Runnable, MouseMotionListener, MouseListener, HierarchyListener {
	Image buttonImage = new ImageIcon(OnOffButton.class.getResource("button.png")).getImage();
	Image bgImage = new ImageIcon(OnOffButton.class.getResource("bg.png")).getImage();

	int buttonX;
	int deltaX = -1;
	boolean drag;

	public void setSelected(boolean selected) {
		super.setSelected(selected);
		new Thread(this).start();
	}

	public OnOffButton() {
		super();
		this.addActionListener(this);
		this.addMouseMotionListener(this);
		this.addMouseListener(this);
		this.addHierarchyListener(this);
	}

	public void paint(Graphics g) {
		g.drawImage(bgImage, 0, 0, getWidth(), getHeight(), null, null);
		g.drawImage(buttonImage, buttonX, 0, getWidth() / 2, this.getHeight(), null, null);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (!drag) {
			// threadStop = true;
			new Thread(this).start();
		}
	}

	@Override
	public void run() {
		// while (true) {
		// if (threadStop) {
		if (this.isSelected()) {
			for (; buttonX <= this.getWidth() / 2; buttonX++) {
				this.repaint();
				try {
					Thread.sleep(5);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}

		} else {
			for (; buttonX > 0; buttonX--) {
				this.repaint();
				try {
					Thread.sleep(5);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
		repaint();
		// threadStop = false;
		// }
		// }
	}

	@Override
	public void mouseDragged(MouseEvent evt) {
		drag = true;
		// threadStop = false;
		if (deltaX == -1) {
			deltaX = evt.getX() - buttonX;
		}

		buttonX = evt.getX() - deltaX;

		if (buttonX < 0) {
			buttonX = 0;
		}
		if (buttonX > this.getWidth() / 2) {
			buttonX = this.getWidth() / 2;
		}

		this.repaint();
	}

	@Override
	public void mouseMoved(MouseEvent arg0) {
	}

	@Override
	public void mouseClicked(MouseEvent arg0) {
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
	}

	@Override
	public void mousePressed(MouseEvent arg0) {
		// threadStop = false;
	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
		deltaX = -1;
		if (drag) {
			if (buttonX < this.getWidth() / 4) {
				this.setSelected(false);
			} else {
				this.setSelected(true);
			}
		}
		drag = false;
	}

	@Override
	public void hierarchyChanged(HierarchyEvent arg0) {
		new Thread(this).start();
	}
}

Imagens para os ícones do JToggleButton: