Problem mit JFrame

Status
Nicht offen für weitere Antworten.

andy0566

Mitglied
hallo,

das Problem ist,dass die Gitterabstände immer um 1 Pixel größer werden,wenn die Maus das Fenster verläss.

Ich hab viel ausprobiert, aber irgendwie klappt das alles nicht.

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SwingTest2 extends JComponent{
	private boolean mouseExit=false;
	public SwingTest2(){
		JFrame jf=new JFrame();
		jf.setSize(300,200);
		jf.getContentPane().add(this);
		jf.setLocation(100,100);
		jf.setVisible(true);
		
		jf.addMouseListener(new MouseAdapter(){
				public void mouseExited(MouseEvent e){
					mouseExit=true;
					
				}
			});
	}
	public void paintComponent(Graphics g){
		g.setColor(Color.red);
		if(mouseExit){
			for(int i=0;i<getWidth();i+=5){
				
				g.drawLine(i,0,i,getHeight());
				g.drawLine(0,i,getWidth(),i);

			}
		}else
			for(int i=0;i<getWidth();i+=6){

				g.drawLine(i,0,i,getHeight());
				g.drawLine(0,i,getWidth(),i);
				
			}
	}
	public static void main(String[]args){
		new SwingTest2();
	}
}
 
ich versteh nicht ganz, was du willst.
sollen sie immer gleich gross bleiben?
du addierst einmal 5 und einmal 6 zu i

falls du willst, dass die kästchen mal größer oder kleiner sind (je nachdem ob mouseexit true ist oder nicht),
musst du im mouselistener noch die methode mouseEntered überschreiben, und darin mouseExit=false setzten.
danach muss jeweils noch repaint angestossen werden.
so z.b.:
Code:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class SwingTest2 extends JComponent implements MouseListener{
   private boolean mouseExit=false;
   public SwingTest2(){
      JFrame jf=new JFrame();
      jf.setSize(300,200);
      jf.getContentPane().add(this);
      jf.setLocation(100,100);
      jf.setVisible(true);
      jf.addMouseListener(this);
   }
   public void paintComponent(Graphics g){
      g.setColor(Color.red);
      if(mouseExit){
         for(int i=0;i<getWidth();i+=5){        
            g.drawLine(i,0,i,getHeight());
            g.drawLine(0,i,getWidth(),i);
      }
      }else
         for(int i=0;i<getWidth();i+=6){
            g.drawLine(i,0,i,getHeight());
            g.drawLine(0,i,getWidth(),i);
         }
   }
   public static void main(String[]args){
      new SwingTest2();
   }
   public void mouseEntered(MouseEvent arg0) {
   		mouseExit = false;
		repaint();	
   }
   public void mouseExited(MouseEvent arg0) {
		mouseExit = true;
		repaint();
   }
   public void mouseClicked(MouseEvent arg0) {
   }
   public void mousePressed(MouseEvent arg0) {
   }	
   public void mouseReleased(MouseEvent arg0) {
   }
}
 
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SwingTest2 extends JComponent {
	private boolean mouseExit=false;
	public SwingTest2(){
		JFrame jf=new JFrame();
		jf.setSize(300,200);
		jf.getContentPane().add(this);
		jf.setLocation(100,100);
		jf.setVisible(true);
		
		jf.addMouseListener(new MouseAdapter(){
				public void mouseExited(MouseEvent e){
					mouseExit=true;
					repaint();
				}
			});
		jf.addMouseListener(new MouseAdapter(){
				public void mouseEntered(MouseEvent e){
					mouseExit=false;
					repaint();
				}
			});
	}
	public void paintComponent(Graphics g){
		g.setColor(Color.red);
		if(mouseExit){
			for(int i=0;i<getWidth();i+=5){
				
				g.drawLine(i,0,i,getHeight());
				g.drawLine(0,i,getWidth(),i);

			}
		}else
			for(int i=0;i<getWidth();i+=6){

				g.drawLine(i,0,i,getHeight());
				g.drawLine(0,i,getWidth(),i);
				
			}
	}
	public static void main(String[]args){
		new SwingTest2();
	}
}

Ja, vielen Dank zd.
So hat's geklappt und ich denke, dass ich auch verstanden habe, warum es vorher nicht lief. Super!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben