Hallo allerseits,
in dem Programm unten (das einwandfrei funktioniert) werden verschiedene Größen festgelegt:
// Größe eines Panels
MyZeichenflaeche myZf = new MyZeichenflaeche(400, 400);
// Größe JFrame -Objekt
f.setSize(550,550);
// Größe eines images
myimg = createImage(sx, sy);
Fragen:
1)
Warum gibt
sx = this.getSize().width;
sy = this.getSize().height;
die folgenden Werte:
sx = 542
sy = 516
Die Zeichenfläche wurde doch auf 400 x 400 festgelegt!!
2)
Egal, was man in
MyZeichenflaeche myZf = new MyZeichenflaeche(400, 400);
als Größe festlegt, die Zeichenfläche wird optisch auf dem _ganzen_ JFrame - Objekt (550 x 550) dargestellt. Welchen Sinn hat dann die Festlegung von den 400 x 400 ?
Wo wirkt sich dies optisch aus?
3)
Warum wird mit
sx = this.getSize().width;
sy = this.getSize().height;
myimg = createImage(sx, sy);
das Image auf diese Größe festgesetzt, wo doch mit
myimg = createImage(100, 100);
oder irgendeinem anderen Wert optisch genau das gleiche passiert?
Ich verstehe die dahinter steckende Logik nicht!
mfg
Ernst
-------------------------------------------------------------------------------
[HIGHLIGHT="Java"]package verzoegertzeichnen3;
import java.awt.*;
import javax.swing.*;
public class MainVerzoegertZeichnen3 {
public static void main(String[] args){
int kreisNummer;
kreisNummer = 1;
MyZeichenflaeche myZf = new MyZeichenflaeche(400, 400);
JFrame f = new JFrame();
f.setSize(550,550);
f.getContentPane().add(myZf);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
while(kreisNummer<=10){
try{
Thread.sleep(10);
}
catch(Exception e){}
kreisNummer=kreisNummer+1;
MyRunnable myR = new MyRunnable(myZf, kreisNummer);
// invokeLater() ist eine static-Methode
SwingUtilities.invokeLater(myR);
}
}
} [/HIGHLIGHT]
[HIGHLIGHT="Java"]class MyZeichenflaeche extends JPanel{
private int xpAnz;
private int ypAnz;
private int kreisNummer;
private Image myimg;
private Graphics myg;
private int sx;
private int sy;
public MyZeichenflaeche(int xpAnz, int ypAnz){
kreisNummer=0;
this.xpAnz=xpAnz;
this.ypAnz=ypAnz;
myimg=null;
}
public void setKreisNummer(int pKreisnummer){
kreisNummer=pKreisnummer;
}
public int getKreisNummer(){
return (kreisNummer);
}
public void male(){
if(myimg==null){
sx = this.getSize().width;
sy = this.getSize().height;
System.out.println("sx="+sx);
System.out.println("sy="+sy);
//myimg = createImage(100, 100);
myimg = createImage(sx, sy);
myg = myimg.getGraphics();
}
// Schreibzugriff auf myimg
myg.setColor(Color.red);
myg.drawOval(kreisNummer*20 , kreisNummer*20, 20, 20);
}
// ist im EDT
public void paintComponent(Graphics g){
// Lesezugriff auf myimg
g.drawImage(myimg,0,0,null);
}
}[/HIGHLIGHT]
[HIGHLIGHT="Java"]class MyRunnable implements Runnable{
private MyZeichenflaeche myZf;
private int kreisNummer;
public void run(){
// ist im EDT
// Schreibzugriff auf das myZf von main
// setzt kreisnummer von myZf in main !! auf einen neuen Wert !!!!
myZf.setKreisNummer(kreisNummer);
// Schreibzugriff auf mying
myZf.male();
// Lesezugriff auf mying in paintComponent
myZf.repaint();
}
public MyRunnable(MyZeichenflaeche pZeichenflaeche, int pKreisnummer){
myZf = pZeichenflaeche;
kreisNummer = pKreisnummer;
}
}[/HIGHLIGHT]
-------------------------------------------------------------------------------
in dem Programm unten (das einwandfrei funktioniert) werden verschiedene Größen festgelegt:
// Größe eines Panels
MyZeichenflaeche myZf = new MyZeichenflaeche(400, 400);
// Größe JFrame -Objekt
f.setSize(550,550);
// Größe eines images
myimg = createImage(sx, sy);
Fragen:
1)
Warum gibt
sx = this.getSize().width;
sy = this.getSize().height;
die folgenden Werte:
sx = 542
sy = 516
Die Zeichenfläche wurde doch auf 400 x 400 festgelegt!!
2)
Egal, was man in
MyZeichenflaeche myZf = new MyZeichenflaeche(400, 400);
als Größe festlegt, die Zeichenfläche wird optisch auf dem _ganzen_ JFrame - Objekt (550 x 550) dargestellt. Welchen Sinn hat dann die Festlegung von den 400 x 400 ?
Wo wirkt sich dies optisch aus?
3)
Warum wird mit
sx = this.getSize().width;
sy = this.getSize().height;
myimg = createImage(sx, sy);
das Image auf diese Größe festgesetzt, wo doch mit
myimg = createImage(100, 100);
oder irgendeinem anderen Wert optisch genau das gleiche passiert?
Ich verstehe die dahinter steckende Logik nicht!
mfg
Ernst
-------------------------------------------------------------------------------
[HIGHLIGHT="Java"]package verzoegertzeichnen3;
import java.awt.*;
import javax.swing.*;
public class MainVerzoegertZeichnen3 {
public static void main(String[] args){
int kreisNummer;
kreisNummer = 1;
MyZeichenflaeche myZf = new MyZeichenflaeche(400, 400);
JFrame f = new JFrame();
f.setSize(550,550);
f.getContentPane().add(myZf);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
while(kreisNummer<=10){
try{
Thread.sleep(10);
}
catch(Exception e){}
kreisNummer=kreisNummer+1;
MyRunnable myR = new MyRunnable(myZf, kreisNummer);
// invokeLater() ist eine static-Methode
SwingUtilities.invokeLater(myR);
}
}
} [/HIGHLIGHT]
[HIGHLIGHT="Java"]class MyZeichenflaeche extends JPanel{
private int xpAnz;
private int ypAnz;
private int kreisNummer;
private Image myimg;
private Graphics myg;
private int sx;
private int sy;
public MyZeichenflaeche(int xpAnz, int ypAnz){
kreisNummer=0;
this.xpAnz=xpAnz;
this.ypAnz=ypAnz;
myimg=null;
}
public void setKreisNummer(int pKreisnummer){
kreisNummer=pKreisnummer;
}
public int getKreisNummer(){
return (kreisNummer);
}
public void male(){
if(myimg==null){
sx = this.getSize().width;
sy = this.getSize().height;
System.out.println("sx="+sx);
System.out.println("sy="+sy);
//myimg = createImage(100, 100);
myimg = createImage(sx, sy);
myg = myimg.getGraphics();
}
// Schreibzugriff auf myimg
myg.setColor(Color.red);
myg.drawOval(kreisNummer*20 , kreisNummer*20, 20, 20);
}
// ist im EDT
public void paintComponent(Graphics g){
// Lesezugriff auf myimg
g.drawImage(myimg,0,0,null);
}
}[/HIGHLIGHT]
[HIGHLIGHT="Java"]class MyRunnable implements Runnable{
private MyZeichenflaeche myZf;
private int kreisNummer;
public void run(){
// ist im EDT
// Schreibzugriff auf das myZf von main
// setzt kreisnummer von myZf in main !! auf einen neuen Wert !!!!
myZf.setKreisNummer(kreisNummer);
// Schreibzugriff auf mying
myZf.male();
// Lesezugriff auf mying in paintComponent
myZf.repaint();
}
public MyRunnable(MyZeichenflaeche pZeichenflaeche, int pKreisnummer){
myZf = pZeichenflaeche;
kreisNummer = pKreisnummer;
}
}[/HIGHLIGHT]
-------------------------------------------------------------------------------
Zuletzt bearbeitet von einem Moderator: