Hi Leute.
Ich versuche gerade eine eigene Buttonklasse zu entwerfen.
Abgeleitet wird diese von zwei JPanelklassen.
Dabei dient ein Panel als "Zeichner", welches mir auf das andere Panels das Entsprechne Bild zeichnet was für den Button gebraucht wird.
Realisiert habe ich das folgendermaßen:
[Java]import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class COwnButton extends JPanel{
Image buttonNormal;
Image buttonMouseOver;
Image buttonPushed;
ImageIcon imgtemp;
CPaintButton paintButton;
int akt = 1; //1 = normal, 2 = gedrückt, 3 = mouse drauf
COwnButton() {
setPreferredSize(new Dimension(96,35));
imgtemp = new ImageIcon("button1.jpg");
buttonNormal = imgtemp.getImage();
imgtemp = new ImageIcon("button3.jpg");
buttonPushed = imgtemp.getImage();
imgtemp = new ImageIcon("button2.jpg");
buttonMouseOver = imgtemp.getImage();
paintButton = new CPaintButton();
add(paintButton);
paintButton.addMouseListener(new CMouseListener());
}
class CMouseListener implements MouseListener{
public void mouseClicked(MouseEvent e){
akt = 2;
paintButton.repaint();
}
public void mouseEntered(MouseEvent e){
akt = 3;
paintButton.repaint();
}
public void mouseExited(MouseEvent e){
akt = 1;
paintButton.repaint();
}
public void mousePressed(MouseEvent e){
akt = 2;
paintButton.repaint();
}
public void mouseReleased(MouseEvent e){
akt = 1;
paintButton.repaint();
}
}
}
[/code]
Und das andere Panel:
CPaintButton ist ne Subklasse von COwnButton, deswegen kann die Referenz auf die aufrufende Panel-Instanz "this" lauten, oder?
Naja jedenfalls zeichnet sich das Panel nicht neu. Ich starte das Programm und "button1" wird angezeigt, jedoch verändert sich sonst nichts, weder wenn ich klicke, noch mit der Mouse drüber fahre.
Finde aber auch irgendwie keinen Fehler...
Ihr vielleicht?
mfg Sneek
Ich versuche gerade eine eigene Buttonklasse zu entwerfen.
Abgeleitet wird diese von zwei JPanelklassen.
Dabei dient ein Panel als "Zeichner", welches mir auf das andere Panels das Entsprechne Bild zeichnet was für den Button gebraucht wird.
Realisiert habe ich das folgendermaßen:
[Java]import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class COwnButton extends JPanel{
Image buttonNormal;
Image buttonMouseOver;
Image buttonPushed;
ImageIcon imgtemp;
CPaintButton paintButton;
int akt = 1; //1 = normal, 2 = gedrückt, 3 = mouse drauf
COwnButton() {
setPreferredSize(new Dimension(96,35));
imgtemp = new ImageIcon("button1.jpg");
buttonNormal = imgtemp.getImage();
imgtemp = new ImageIcon("button3.jpg");
buttonPushed = imgtemp.getImage();
imgtemp = new ImageIcon("button2.jpg");
buttonMouseOver = imgtemp.getImage();
paintButton = new CPaintButton();
add(paintButton);
paintButton.addMouseListener(new CMouseListener());
}
class CMouseListener implements MouseListener{
public void mouseClicked(MouseEvent e){
akt = 2;
paintButton.repaint();
}
public void mouseEntered(MouseEvent e){
akt = 3;
paintButton.repaint();
}
public void mouseExited(MouseEvent e){
akt = 1;
paintButton.repaint();
}
public void mousePressed(MouseEvent e){
akt = 2;
paintButton.repaint();
}
public void mouseReleased(MouseEvent e){
akt = 1;
paintButton.repaint();
}
}
}
[/code]
Und das andere Panel:
Java:
class CPaintButton extends JPanel{
CPaintButton(){
setPreferredSize(new Dimension(96,35));
}
public void paintComponent(Graphics g){
//super.paintComponent(g);
switch(akt){
case 1: g.drawImage(buttonNormal, 0, 0, this);
case 2: g.drawImage(buttonPushed, 0, 0, this);
case 3: g.drawImage(buttonMouseOver, 0, 0, this);
case 4: g.drawImage(buttonNormal, 0, 0, this);
}
}
}
Naja jedenfalls zeichnet sich das Panel nicht neu. Ich starte das Programm und "button1" wird angezeigt, jedoch verändert sich sonst nichts, weder wenn ich klicke, noch mit der Mouse drüber fahre.
Finde aber auch irgendwie keinen Fehler...
Ihr vielleicht?
mfg Sneek