problemi s paint() v applet
10 отговора
115 прегледа
problemi s paint() v applet
Zdraweite!
Imam takyw problem: na edin applet sym slojil Label-i, tekstowi poleta i butoni. Kogato se natisne edinia buton, se 4ertaiat otkryjnosti po danni ot poletata. Pri natiskane na drugia posledowatelno triabwa da se iz4ertawat dopiratelni. I tuk e problemyt - pri iz4ertawaneto na wsiaka sledwa6ta dopiratelna se 4isti ekrana i ostanalite iz4ertani ne6ta iz4ezwat. Towa go biah pisal predi i si rabote6e, no PC-to se skapa i si zatrih koda. Sega prosto ne pomnia kakwo praweh. Ako niakoi moje da pomogne, mnogo 6te mu se zaradwam!
Imam takyw problem: na edin applet sym slojil Label-i, tekstowi poleta i butoni. Kogato se natisne edinia buton, se 4ertaiat otkryjnosti po danni ot poletata. Pri natiskane na drugia posledowatelno triabwa da se iz4ertawat dopiratelni. I tuk e problemyt - pri iz4ertawaneto na wsiaka sledwa6ta dopiratelna se 4isti ekrana i ostanalite iz4ertani ne6ta iz4ezwat. Towa go biah pisal predi i si rabote6e, no PC-to se skapa i si zatrih koda. Sega prosto ne pomnia kakwo praweh. Ako niakoi moje da pomogne, mnogo 6te mu se zaradwam!
eto koda:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class SimplePoncelet extends Applet {
private static final Color middleGray = new Color(136,136,140);
private double rb,rs,d,x0=300,y0=250,x1=0,y1=0,x2,y2;
private boolean DCBtnClicked = false;
private boolean DTgBtnClicked = false;
private Button drawTgBtn;
private Button drawCirclesBtn;
private TextField tf_rb;
private TextField tf_rs;
private TextField tf_d;
private TextField tf_spx;
private BtnTgList btnTgList = new BtnTgList();
private BtnCircleList btnCircleList = new BtnCircleList();
public void init() {
drawTgBtn = new Button("Draw next tangent");
drawTgBtn.addActionListener(btnTgList);
drawCirclesBtn = new Button("Draw circles");
drawCirclesBtn.addActionListener(btnCircleList);
tf_rb = new TextField("150");
tf_rs = new TextField("50");
tf_d = new TextField("70");
tf_spx = new TextField("300");
add(new Label("rb ="));
add(tf_rb);
add(new Label("rs ="));
add(tf_rs);
add(new Label("d ="));
add(tf_d);
add(new Label("x ="));
add(tf_spx);
add(drawCirclesBtn);
add(drawTgBtn);
}
class BtnTgList implements ActionListener {
public void actionPerformed(ActionEvent e){
DTgBtnClicked = true;
repaint();
}
}
class BtnCircleList implements ActionListener {
public void actionPerformed(ActionEvent e){
DCBtnClicked = true;
repaint();
}
}
public void paint(Graphics g) {
if (DCBtnClicked) {
DCBtnClicked = false;
rb = Double.parseDouble(tf_rb.getText());
rs = Double.parseDouble(tf_rs.getText());
d = Double.parseDouble(tf_d.getText());
x1 = Double.parseDouble(tf_spx.getText());
y1 = 0;
g.setColor(Color.darkGray);
g.fillOval((int)(x0+d-1),(int)(y0-1),3,3);
g.drawOval((int)(x0+d-rb),(int)(y0-rb),(int)(2*rb),(int)(2*rb));
g.setColor(middleGray);
g.fillOval((int)(x0-1),(int)(y0-1),3,3);
g.drawOval((int)(x0-rs),(int)(y0-rs),(int)(2*rs),(int)(2*rs));
}
if (DTgBtnClicked) {
DTgBtnClicked = false;
double xi = x1-x0;
double yi;
if (y1 == 0) {
yi = Math.sqrt(rb*rb-(xi-d)*(xi-d));
y1 = yi+y0;
}
yi = y1-y0;
g.setColor(Color.red);
g.fillRect((int)x1-1,(int)y1-1,3,3);
double ti = Math.sqrt(xi*xi+yi*yi);
double ui = xi/ti;
double vi = yi/ti;
double bi = Math.sqrt(ti*ti-rs*rs);
double ci = 2*(bi-(rs*vi+ui*bi)*d/ti);
double x2 = xi+((rs*ui-bi*vi)*rs/ti-xi)*ci/bi + x0;
double y2 = yi+((rs*vi+bi*ui)*rs/ti-yi)*ci/bi + y0;
g.setColor(Color.blue);
g.drawLine((int)x1,(int)y1,(int)x2,(int)y2);
x1 = x2; y1 = y2;
}
}
import java.applet.*;
import java.awt.event.*;
public class SimplePoncelet extends Applet {
private static final Color middleGray = new Color(136,136,140);
private double rb,rs,d,x0=300,y0=250,x1=0,y1=0,x2,y2;
private boolean DCBtnClicked = false;
private boolean DTgBtnClicked = false;
private Button drawTgBtn;
private Button drawCirclesBtn;
private TextField tf_rb;
private TextField tf_rs;
private TextField tf_d;
private TextField tf_spx;
private BtnTgList btnTgList = new BtnTgList();
private BtnCircleList btnCircleList = new BtnCircleList();
public void init() {
drawTgBtn = new Button("Draw next tangent");
drawTgBtn.addActionListener(btnTgList);
drawCirclesBtn = new Button("Draw circles");
drawCirclesBtn.addActionListener(btnCircleList);
tf_rb = new TextField("150");
tf_rs = new TextField("50");
tf_d = new TextField("70");
tf_spx = new TextField("300");
add(new Label("rb ="));
add(tf_rb);
add(new Label("rs ="));
add(tf_rs);
add(new Label("d ="));
add(tf_d);
add(new Label("x ="));
add(tf_spx);
add(drawCirclesBtn);
add(drawTgBtn);
}
class BtnTgList implements ActionListener {
public void actionPerformed(ActionEvent e){
DTgBtnClicked = true;
repaint();
}
}
class BtnCircleList implements ActionListener {
public void actionPerformed(ActionEvent e){
DCBtnClicked = true;
repaint();
}
}
public void paint(Graphics g) {
if (DCBtnClicked) {
DCBtnClicked = false;
rb = Double.parseDouble(tf_rb.getText());
rs = Double.parseDouble(tf_rs.getText());
d = Double.parseDouble(tf_d.getText());
x1 = Double.parseDouble(tf_spx.getText());
y1 = 0;
g.setColor(Color.darkGray);
g.fillOval((int)(x0+d-1),(int)(y0-1),3,3);
g.drawOval((int)(x0+d-rb),(int)(y0-rb),(int)(2*rb),(int)(2*rb));
g.setColor(middleGray);
g.fillOval((int)(x0-1),(int)(y0-1),3,3);
g.drawOval((int)(x0-rs),(int)(y0-rs),(int)(2*rs),(int)(2*rs));
}
if (DTgBtnClicked) {
DTgBtnClicked = false;
double xi = x1-x0;
double yi;
if (y1 == 0) {
yi = Math.sqrt(rb*rb-(xi-d)*(xi-d));
y1 = yi+y0;
}
yi = y1-y0;
g.setColor(Color.red);
g.fillRect((int)x1-1,(int)y1-1,3,3);
double ti = Math.sqrt(xi*xi+yi*yi);
double ui = xi/ti;
double vi = yi/ti;
double bi = Math.sqrt(ti*ti-rs*rs);
double ci = 2*(bi-(rs*vi+ui*bi)*d/ti);
double x2 = xi+((rs*ui-bi*vi)*rs/ti-xi)*ci/bi + x0;
double y2 = yi+((rs*vi+bi*ui)*rs/ti-yi)*ci/bi + y0;
g.setColor(Color.blue);
g.drawLine((int)x1,(int)y1,(int)x2,(int)y2);
x1 = x2; y1 = y2;
}
}
симпатяга, толкова ли е трудно да преместиш if? :)
Friend, RTFM :-)))) Нищо не ти изчезва, просто когато си в paint, ти трябва да преначертаеш всичко.
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class SimplePointCelet
extends Applet {
private static final Color middleGray = new Color(136, 136, 140);
private double rb, rs, d, x0 = 300, y0 = 250, x1 = 0, y1 = 0, x2, y2;
private boolean DCBtnClicked = false;
private boolean DTgBtnClicked = false;
private Button drawTgBtn;
private Button drawCirclesBtn;
private TextField tf_rb;
private TextField tf_rs;
private TextField tf_d;
private TextField tf_spx;
private BtnTgList btnTgList = new BtnTgList();
private BtnCircleList btnCircleList = new BtnCircleList();
public void init() {
drawTgBtn = new Button("Draw next tangent");
drawTgBtn.addActionListener(btnTgList);
drawCirclesBtn = new Button("Draw circles");
drawCirclesBtn.addActionListener(btnCircleList);
tf_rb = new TextField("150");
tf_rs = new TextField("50");
tf_d = new TextField("70");
tf_spx = new TextField("300");
add(new Label("rb ="));
add(tf_rb);
add(new Label("rs ="));
add(tf_rs);
add(new Label("d ="));
add(tf_d);
add(new Label("x ="));
add(tf_spx);
add(drawCirclesBtn);
add(drawTgBtn);
}
class BtnTgList
implements ActionListener {
public void actionPerformed(ActionEvent e) {
DTgBtnClicked = true;
repaint();
}
}
class BtnCircleList
implements ActionListener {
public void actionPerformed(ActionEvent e) {
DCBtnClicked = true;
repaint();
}
}
public void paint(Graphics g) {
if (DCBtnClicked) {
rb = Double.parseDouble(tf_rb.getText());
rs = Double.parseDouble(tf_rs.getText());
d = Double.parseDouble(tf_d.getText());
x1 = Double.parseDouble(tf_spx.getText());
y1 = 0;
}
if (DCBtnClicked)
DCBtnClicked = false;
g.setColor(Color.darkGray);
g.fillOval( (int) (x0 + d - 1), (int) (y0 - 1), 3, 3);
g.drawOval( (int) (x0 + d - rb), (int) (y0 - rb), (int) (2 * rb),
(int) (2 * rb));
g.setColor(middleGray);
g.fillOval( (int) (x0 - 1), (int) (y0 - 1), 3, 3);
g.drawOval( (int) (x0 - rs), (int) (y0 - rs), (int) (2 * rs),
(int) (2 * rs));
if (DTgBtnClicked) {
DTgBtnClicked = false;
double xi = x1 - x0;
double yi;
if (y1 == 0) {
yi = Math.sqrt(rb * rb - (xi - d) * (xi - d));
y1 = yi + y0;
}
yi = y1 - y0;
g.setColor(Color.red);
g.fillRect( (int) x1 - 1, (int) y1 - 1, 3, 3);
double ti = Math.sqrt(xi * xi + yi * yi);
double ui = xi / ti;
double vi = yi / ti;
double bi = Math.sqrt(ti * ti - rs * rs);
double ci = 2 * (bi - (rs * vi + ui * bi) * d / ti);
double x2 = xi + ( (rs * ui - bi * vi) * rs / ti - xi) * ci / bi + x0;
double y2 = yi + ( (rs * vi + bi * ui) * rs / ti - yi) * ci / bi + y0;
g.setColor(Color.blue);
g.drawLine( (int) x1, (int) y1, (int) x2, (int) y2);
x1 = x2;
y1 = y2;
}
}
}
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class SimplePointCelet
extends Applet {
private static final Color middleGray = new Color(136, 136, 140);
private double rb, rs, d, x0 = 300, y0 = 250, x1 = 0, y1 = 0, x2, y2;
private boolean DCBtnClicked = false;
private boolean DTgBtnClicked = false;
private Button drawTgBtn;
private Button drawCirclesBtn;
private TextField tf_rb;
private TextField tf_rs;
private TextField tf_d;
private TextField tf_spx;
private BtnTgList btnTgList = new BtnTgList();
private BtnCircleList btnCircleList = new BtnCircleList();
public void init() {
drawTgBtn = new Button("Draw next tangent");
drawTgBtn.addActionListener(btnTgList);
drawCirclesBtn = new Button("Draw circles");
drawCirclesBtn.addActionListener(btnCircleList);
tf_rb = new TextField("150");
tf_rs = new TextField("50");
tf_d = new TextField("70");
tf_spx = new TextField("300");
add(new Label("rb ="));
add(tf_rb);
add(new Label("rs ="));
add(tf_rs);
add(new Label("d ="));
add(tf_d);
add(new Label("x ="));
add(tf_spx);
add(drawCirclesBtn);
add(drawTgBtn);
}
class BtnTgList
implements ActionListener {
public void actionPerformed(ActionEvent e) {
DTgBtnClicked = true;
repaint();
}
}
class BtnCircleList
implements ActionListener {
public void actionPerformed(ActionEvent e) {
DCBtnClicked = true;
repaint();
}
}
public void paint(Graphics g) {
if (DCBtnClicked) {
rb = Double.parseDouble(tf_rb.getText());
rs = Double.parseDouble(tf_rs.getText());
d = Double.parseDouble(tf_d.getText());
x1 = Double.parseDouble(tf_spx.getText());
y1 = 0;
}
if (DCBtnClicked)
DCBtnClicked = false;
g.setColor(Color.darkGray);
g.fillOval( (int) (x0 + d - 1), (int) (y0 - 1), 3, 3);
g.drawOval( (int) (x0 + d - rb), (int) (y0 - rb), (int) (2 * rb),
(int) (2 * rb));
g.setColor(middleGray);
g.fillOval( (int) (x0 - 1), (int) (y0 - 1), 3, 3);
g.drawOval( (int) (x0 - rs), (int) (y0 - rs), (int) (2 * rs),
(int) (2 * rs));
if (DTgBtnClicked) {
DTgBtnClicked = false;
double xi = x1 - x0;
double yi;
if (y1 == 0) {
yi = Math.sqrt(rb * rb - (xi - d) * (xi - d));
y1 = yi + y0;
}
yi = y1 - y0;
g.setColor(Color.red);
g.fillRect( (int) x1 - 1, (int) y1 - 1, 3, 3);
double ti = Math.sqrt(xi * xi + yi * yi);
double ui = xi / ti;
double vi = yi / ti;
double bi = Math.sqrt(ti * ti - rs * rs);
double ci = 2 * (bi - (rs * vi + ui * bi) * d / ti);
double x2 = xi + ( (rs * ui - bi * vi) * rs / ti - xi) * ci / bi + x0;
double y2 = yi + ( (rs * vi + bi * ui) * rs / ti - yi) * ci / bi + y0;
g.setColor(Color.blue);
g.drawLine( (int) x1, (int) y1, (int) x2, (int) y2);
x1 = x2;
y1 = y2;
}
}
}
Редактирано от Koнcтaнтин Cпиpoв на
uf :(
predi ni6to ne mi iz4ezwa6e, no izob6to niamam spomeni kak si naprawih apleta. be6e ne6to mnogo glupawo i omazano, ama si rabote6e - dokato ne se promeni prozoreca razbira se. prosto iskam pri 4ertaneto na sledwa6ta linia predi6nite da ne iz4ezwat i da prawia repaint na wsi4ko samo pri promiana na prozoreca. wyzmojno e.
Re: uf :(
override-ni update methoda eto taka:
public void update(Graphics g) {
this.paint(g);
}
a ostavi stariq paint kato si e bil...
public void update(Graphics g) {
this.paint(g);
}
a ostavi stariq paint kato si e bil...
Re: update
aha... v update ima edno vikane na g.clearRect() (ili neshto takova beshe) koeto ti trie cqlata vidima oblast na componenta po default... kato go overridnesh tova triene se izbqgva i nqma nujda da prechertavash vsichko ostanalo...
Re: uf :(
Vzemi se nauchi da chetesh pone sobstvenia si kod - ne vizdash li, che programata po-gore ti e opravena i shte raboti - niakoi dobar chovek ti go e opravil :-)
Re: uf :(
Taka e, no edva li triabva da hvasta update, zashtoto shte si uslozni oshte poveche i bez tova izlishno usloznenata programa - nali niakoi predi tova triabva da mu izchisti starata tangenta? I bez tova vizdam, che izlishno izpolzva dva bulevi flaga i vinagi ediniqt e obratnia na drugia, vmesto da slozi edna not ~ :-)))))
Blagodaria
... na Konstantin Spirov i Ingon za pomo6tta! Tova s update() proraboti. Sega vsi4kite mi dopiratelni si se vijdat.