gpt4 book ai didi

JavaMe MIDlet 和 Canvas

转载 作者:行者123 更新时间:2023-12-01 15:55:54 26 4
gpt4 key购买 nike

我正在尝试制作一个使用 midlet 作为菜单的程序。当从菜单访问某些命令时,它将访问 Canvas (就像在弹出按钮中选择 fillrectangle 和 fillarc 一样)。如果我选择fillrectangle,它将访问绘制填充矩形的 Canvas 。
问题是当我访问 fillarc 时什么也没有发生,但在 fillrectangle 上却发生了。

另一个问题是我不知道如何将菜单中的X和Y坐标应用到fillrectangle上,以便用户控制所选对象的位置。 '

这是我的代码:

/*
* 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.getSelectedIndex();
if (select==1){
display.setCurrent (new DrawingArc ());
}
}
else {

}
}
}

最佳答案

看看这段代码...(我的评论和缩进)

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?
}
}

我并不是要粗鲁,但是这段代码不太稳定...您应该澄清您的 java me 概念或尝试澄清您的代码...我相信如果你改成下面的代码,就可以解决第一个问题:

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 ());
}
}
}

对于第二个问题,我可能会在表单中添加某种移动到... 按钮。如果按下它,您可以使用给定的 X 和 Y 创建 Canvas ,或者...下面的一些提示:

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);
}
}
}

显然,这样调用它:

display.setCurrent (new DrawingRect(tfX.getString(),tfY.getString()));

但是,所有这些都是非常基本的 Java 概念,我认为您应该在进一步讨论之前改进它们......只是一个建议。

关于JavaMe MIDlet 和 Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5054334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com