Hi!
Ich nerv euch vielleicht mit meiner ewigen Fragerei, aber: Wenn ich durch MouseEntered dem JButton einen neuen Icon geben will, verschwindet der JButton einfach! Warum?
Ups, ihr könnt die Bilder ja gar nicht haben! Stellt euch das so vor: In dem Fenster liegt ein JButton, ohne Rand, mit einem Bild als Icon. Dieses sieht aus wie ein Kegel oder eine Kugel von oben. Wenn man jetzt mit dem Cursor (ein CROSSHAIR_CURSOR) auf dieses Bild fährt, soll eigentlich ein Zieler um das Bild erscheinen. Das habe ich mit einem zweiten Icon gelöst. Aber jetzt verschwindet der JButton einfach, wenn ich ihn mit dem Cursor berühre!
Dein Fehler ist auf Zeile 42 und 43: du definierst hier zwei lokale Variablen, in denen du die Icons speicherst. Aber die Objektvariablen "pointIcon1, pointIconSe1" lässt du auf null.
Später setzt du diese "null"-Icons. Da die Icons das einzige am Button waren, das ihn noch sichtbar machten, sieht man danach nichts mehr (obwohl er noch da ist, man kann sogar auf ihn klicken).
Lösung: keine neuen Variablen definieren, sondern direkt die Objektvariablen ansprechen.
Code:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Point extends Frame
implements ActionListener, WindowListener, MouseListener {
private JPanel points1;
private JButton point1;
private ImageIcon pointIcon1;
private ImageIcon pointIcon1Sel;
public static void main (String[] args) {
Point pointing = new Point();
pointing.setTitle("POINT");
pointing.setSize(700,700);
pointing.setBackground(Color.darkGray);
pointing.setCursor(CROSSHAIR_CURSOR);
pointing.setVisible(true);
}
Point() {
makeGui();
addWindowListener(this);
}
public void makeGui() {
points1 = new JPanel();
points1.setLayout(null);
points1.setBackground(Color.lightGray);
pointIcon1 = new ImageIcon( "PointImage1.gif" );
pointIcon1Sel = new ImageIcon( "PointImage1Selected.gif" );
point1 = new JButton("");
points1.add(BorderLayout.CENTER,point1);
point1.addActionListener(this);
points1.add(point1);
point1.setBounds(164,433,50,50);
point1.setBackground(Color.lightGray);
add(BorderLayout.CENTER,points1);
point1.setIcon(pointIcon1);
point1.setBorder(null);
point1.addMouseListener(this);
point1.setEnabled(true);
}
public void windowClosing(WindowEvent e) {
System.exit(0);
}
public void actionPerformed(ActionEvent event) { }
public void mouseEntered(MouseEvent ev) {
if (ev.getSource() == point1) {
point1.setIcon(pointIcon1Sel);
}
}
public void windowOpened(WindowEvent e) { }
public void windowIconified(WindowEvent e) { }
public void windowClosed(WindowEvent e) { }
public void windowActivated(WindowEvent e) { }
public void windowDeiconified(WindowEvent e) { }
public void windowDeactivated(WindowEvent e) { }
public void mousePressed(MouseEvent ev) { }
public void mouseReleased(MouseEvent ev) { }
public void mouseClicked(MouseEvent ev) { }
public void mouseExited(MouseEvent ev) { }
}