Hallo,
ich habe zur Übung einen ColorReader geschrieben (Anfänger in Java),
jetzt habe ich eine kleine Lupe mit 11x11 JPanels eingebaut bei denen ich mit dem My_Timer die jeweiligen Farben abfrage, was auch gut funktioniert.
In der Paint Methode zeichne ich das Fadenkreuz mit zwei Linien:
g.drawLine( 32, 15,32,105 );
g.drawLine( 0, 46,62,46 );
welche natürlich über die JPanels verlaufen sollen, dazu brauche ich in dem Timer die Methode repaint();, aber die angewand flackert das ganze programm so komisch. Habe es auch schon bei diesen JPanels mit setDoubleBuffered proiert, ohne erfolg.
Viellicht kann mir einer einen Tipp geben wie ich dieses unschöne Flackern in den Griff bekomme.
Hier codeausschnitte: (Will wegen der Unübersichtlichkeit nicht den komplette code posten.)
Gruß
ich habe zur Übung einen ColorReader geschrieben (Anfänger in Java),
jetzt habe ich eine kleine Lupe mit 11x11 JPanels eingebaut bei denen ich mit dem My_Timer die jeweiligen Farben abfrage, was auch gut funktioniert.
In der Paint Methode zeichne ich das Fadenkreuz mit zwei Linien:
g.drawLine( 32, 15,32,105 );
g.drawLine( 0, 46,62,46 );
welche natürlich über die JPanels verlaufen sollen, dazu brauche ich in dem Timer die Methode repaint();, aber die angewand flackert das ganze programm so komisch. Habe es auch schon bei diesen JPanels mit setDoubleBuffered proiert, ohne erfolg.
Viellicht kann mir einer einen Tipp geben wie ich dieses unschöne Flackern in den Griff bekomme.
Hier codeausschnitte: (Will wegen der Unübersichtlichkeit nicht den komplette code posten.)
Java:
....
ColorReader()
{ try
{ robot = new Robot();
} catch (AWTException e)
{ e.printStackTrace();
}
klick = false;
this.setTitle("Color Reader");
this.setLayout( new BorderLayout() );
this.setUndecorated(true);
//Lupe erstellen
//Farbepanel
Farbe = new JPanel();
Farbe.setLayout( new GridLayout( 11, 11 ) );
Farbe.setDoubleBuffered(true);
lupe = new JPanel[11][];
for(int i = 0; i < lupe.length; i++)
lupe[i] = new JPanel[11];
for(int i = 0; i < lupe.length; i++)
for(int j = 0; j < lupe[i].length; j++)
{ lupe[i][j] = new JPanel();
lupe[i][j].setPreferredSize(new Dimension(5,5));
lupe[i][j].setBackground(Color.black);
lupe[i][j].setDoubleBuffered(true);
Farbe.add(lupe[i][j]);
}
....
....
public void paint(Graphics g)
{ super.paint(g);
//Rand und Titelleiste Linien zeichnen
Dimension size = new Dimension(this.getSize());
g.drawLine(0, 15, (int)size.getWidth(), 15);
g.drawLine(0, 0, 0, (int)size.getHeight());
g.drawLine(0, 0, (int)size.getWidth(), 0);
g.drawLine((int)size.getWidth()-1, 0, (int)size.getWidth()-1, (int)size.getHeight());
g.drawLine(0, (int)size.getHeight()-1, (int)size.getWidth(), (int)size.getHeight()-1);
//Fadenkreuz zeichnen
g.drawLine( 32, 15,32,105 );
g.drawLine( 0, 46,62,46 );
}
....
....
public class My_Timer extends TimerTask
{ public void run()
{ if(!klick)
{
PointerInfo pointerInfo = MouseInfo.getPointerInfo();
Point point = pointerInfo.getLocation();
if(robot != null)
{ c = robot.getPixelColor((int)point.getX(),(int)point.getY());
for(int i = 0; i < lupe.length; i++)
for(int j = 0; j < lupe[i].length; j++)
{
lupe[i][j].setBackground(robot.getPixelColor((int)point.getX()- 5 + j,(int)point.getY() - 5 + i));
}
tf_R.setText(String.valueOf( c.getRed() ));
tf_G.setText(String.valueOf( c.getGreen() ));
tf_B.setText(String.valueOf( c.getBlue() ));
tf_hex.setText("#" + Integer.toHexString(c.getRed()).toUpperCase() + Integer.toHexString(c.getGreen()).toUpperCase() + Integer.toHexString(c.getBlue()).toUpperCase() );
repaint();
}
}
}
}
public static void main( String[] args )
{ new ColorReader();
}
}
Gruß