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:
![]()
![]()


