JButton verschwindet

Status
Nicht offen für weitere Antworten.

unknown_member

Bekanntes Mitglied
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?

Vielen Dank, unknown_member
 
Weil die Milch grün ist.

Ernsthaft, ohne ein KSKB kann dir niemand eine gescheite Antwort auf die Frage geben.
 
Hier ist dein KSBK:


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);
	 
	 
	 ImageIcon pointIcon1    = new ImageIcon( "PointImage1.gif" );
	 ImageIcon 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) { }
	 
	 }


Es ist zwar in bisschen lang, aber das ist wirklich nur der relevante Teil.


_____
MfG, unknown_member
 
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) { }
	 
	 }


_____
MfG, unknown_member[/quote]
 
Du sollst statt..
Code:
    ImageIcon pointIcon1    = new ImageIcon( "PointImage1.gif" );
    ImageIcon pointIcon1Sel = new ImageIcon( "PointImage1Selected.gif" );
...schreiben...
Code:
    pointIcon1    = new ImageIcon( "PointImage1.gif" );
    pointIcon1Sel = new ImageIcon( "PointImage1Selected.gif" );
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben