I'm trying to make a program that uses midlet for the menu. When certain command accessed from the menu,it will access the canvas (like in a popup button a selection of fillrectangle and fillarc). If I select the fillrectangle it will access the canvas that draws the fill rectangle.
The problem is when I access the fillarc nothing happens, but on the fillrectangle it does.Another problem is that I don't know how to apply the X and Y coordinates in the menu to the fillrectangle for the user to control the position of the selected object. '
Here is my code:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
/**
* @author Nico
*/
public class emp extends MIDlet implements CommandListener {
Display display;
Form frm = new Form ("Main");
ChoiceGroup Cg1;
ChoiceGroup Cg2;
TextField tfX = new TextField ("X Axis"," ",40,TextField.ANY);
TextField tfY = new TextField ("Y Axis"," ",40,TextField.ANY);
Command OK;
public emp () {
OK = new Command ("OK",Command.OK,1);
Cg2 = new ChoiceGroup("Color", Choice.POPUP);
Cg1 = new ChoiceGroup("Type", Choice.POPUP);
Cg1.append("Rectangle", null);
Cg1.append("Arc", null);
Cg1.append("Line", null);
Cg2.append("Red", null);
Cg2.append("Blue", null);
Cg2.append("Green", null);
frm.append(Cg1);
frm.append(tfX);
frm.append(tfY);
frm.append(Cg2);
frm.addCommand(OK);
frm.setCommandListener(this);
}
public void startApp () {
display = Display.getDisplay(this);
display.setCurrent(frm);
}
public void pauseApp () {}
public void destroyApp (boolean forced) {}
class DrawingRect extends Canvas implements CommandListener {
Command Bk;
public DrawingRect (){
this.addCommand(Bk= new Command("Back", Command.BACK, 0 ) );
this.setCommandListener(this);
}
public void paint (Graphics g) {
int x1=100,y1=100;
g.setColor (0, 0, 0);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor (0, 0, 255);
g.fillRect(x1,y1, 50, 50);
g.drawString("aaaaaa", getWidth()/2, getHeight()/2, Graphics.TOP|Graphics.HCENTER);
}
public void commandAction(Command c, Displayable d) {
if (c==Bk){
display.setCurrent(frm);
}
}
}
public class DrawingArc extends Canvas implements CommandListener {
Command Bk;
public DrawingArc (){
this.addCommand(Bk= new Command("Back", Command.BACK, 0 ) );
this.setCommandListener(this);
}
public void paint (Graphics g) {
g.setColor (0, 0, 0);
g.fillRect(0, 0, getWidth(), getHeight());
g.setGrayScale(13*16);
g.fillArc(0,0,getWidth(),getHeight(),90,360);
}
public void commandAction(Command c, Displayable d) {
if (c==Bk){
display.setCurrent(frm);
}
}
}
public void commandAction(Command c, Displayable d) {
if (c==OK) {
int select = Cg1.getSelectedIndex();
if (select==0){
display.setCurrent (new DrawingRect ());
}
}
else if (c==OK){
int select = Cg1.getSel开发者_JS百科ectedIndex();
if (select==1){
display.setCurrent (new DrawingArc ());
}
}
else {
}
}
}
Have a look to this piece of code... (comments and indents by me)
public void commandAction(Command c, Displayable d) {
if (c==OK) {
int select = Cg1.getSelectedIndex();
if (select==0){
display.setCurrent (new DrawingRect ());
}
}else if (c==OK){
// It will never ever ever reach this block
int select = Cg1.getSelectedIndex();
if (select==1){
display.setCurrent (new DrawingArc ());
}
}else {
// WTF?
}
}
I don't mean to be rude, but this code is not very understable... you should clarify your java me concepts or try to clarify you code... I believe if you change to the code below, you could solve the first problem:
public void commandAction(Command c, Displayable d) {
if (c==OK) {
int select = Cg1.getSelectedIndex();
if (select==0){
display.setCurrent (new DrawingRect ());
}else if (select==1){
display.setCurrent (new DrawingArc ());
}
}
}
For the second problem, I would probably add some sort of Move to...
button to the form. If you press it, you can create the canvas with given X and Y, or... Some hint below:
class DrawingRect extends Canvas implements CommandListener {
Command Bk;
int x1, y1;
public DrawingRect (int newX, int newY){
this.addCommand(Bk= new Command("Back", Command.BACK, 0 ) );
this.setCommandListener(this);
x1 = newX;
y1 = newY;
}
public void paint (Graphics g) {
g.setColor (0, 0, 0);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor (0, 0, 255);
g.fillRect(x1,y1, 50, 50);
g.drawString("aaaaaa", getWidth()/2, getHeight()/2, Graphics.TOP|Graphics.HCENTER);
}
public void commandAction(Command c, Displayable d) {
if (c==Bk){
display.setCurrent(frm);
}
}
}
And obviously, calling it like this:
display.setCurrent (new DrawingRect(tfX.getString(),tfY.getString()));
But, all of these are very basic Java concepts, I think you should improve them before going any further... Just a suggestion.
精彩评论