JAVA,如何使下拉菜单被点击后触发事件
很不好意思的是,以下这段程序也是通过求助得来的.自己的JAVA水平真的很有限.现在的问题是,下拉菜单中有select,sin,cos,tan四个选项.如何通过选中sin,...
很不好意思的是, 以下这段程序也是通过求助得来的. 自己的JAVA水平真的很有限. 现在的问题是,下拉菜单中有select, sin, cos, tan四个选项. 如何通过选中sin,cos,tan的选项来触发改变曲线呢?
试过用IF, 但是不太灵光的说... 唉 高手帮忙啊~~
import java.awt.Canvas;
import java.awt.Choice;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.*;
public class Sine extends Frame implements ItemListener{
public static void main(String arg[]) {
Sine s = new Sine("Sine curve");
s.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
s.setLayout(new FlowLayout());
s.setSize(430, 280);
Choice choice=new Choice();
choice.addItem("select");
choice.addItem("sin");
choice.addItem("cos");
choice.addItem("tan");
choice.addItemListener((ItemListener) new Sine());
s.add(choice);
MyCanvas cnv= new MyCanvas( );
cnv.setSize(400, 200);
cnv.setBackground(Color.white);
cnv.setForeground(Color.black);
s.add(cnv);
s.setVisible(true); // for JDK 1.5
//s.show(); // for JDK 1.4
}
public Sine(){}
public Sine(String title)
{
super(title);
}
public void itemStateChanged(ItemEvent e){ }
}
class P{
int marg=10, xorg=0, yorg=100, width=400, height=200;
double sx = 1.0, sy = 80.0;
int x, y, u, v;
public P(int u, int v){
this.u = u;
this.v = v;
UVtoXY();
}
public void UVtoXY(){
x = xorg + marg + (int)(sx*(double)u);
y = yorg + marg - (int)(sy*(double)v);
}
public void UVtoXY(double du, double dv){
x = xorg + marg + (int)(sx*du);
y = yorg + marg - (int)(sy*dv);
}
}
class MyCanvas extends Canvas{
public void paint(Graphics g) {
int i;
double u, v, frq=2.0;
P org = new P(0, 0);
P x400 = new P(400, 0);
P ypone = new P(0, 1);
P ymone = new P(0, -1);
g.drawLine(org.x, org.y, x400.x, x400.y);
g.drawLine(ypone.x, ypone.y, ymone.x, ymone.y);
P pold = new P(0, 0);
P pnew = new P(0, 0);
for(i = 0; i < 360 ; i=i+1) {
u = (double)i;
v = Math.sin(frq*u*Math.PI/180.0);
pnew.UVtoXY(u, v);
g.drawLine(pold.x, pold.y, pnew.x, pnew.y);
pold.x = pnew.x; pold.y = pnew.y;
}
}
}
谢谢haozi0079的回答, 那个监听我倒是会用, 只是不知道如何在main里面直接触发绘图~~~ 还请大家仔细说说~~ 展开
试过用IF, 但是不太灵光的说... 唉 高手帮忙啊~~
import java.awt.Canvas;
import java.awt.Choice;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.*;
public class Sine extends Frame implements ItemListener{
public static void main(String arg[]) {
Sine s = new Sine("Sine curve");
s.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
s.setLayout(new FlowLayout());
s.setSize(430, 280);
Choice choice=new Choice();
choice.addItem("select");
choice.addItem("sin");
choice.addItem("cos");
choice.addItem("tan");
choice.addItemListener((ItemListener) new Sine());
s.add(choice);
MyCanvas cnv= new MyCanvas( );
cnv.setSize(400, 200);
cnv.setBackground(Color.white);
cnv.setForeground(Color.black);
s.add(cnv);
s.setVisible(true); // for JDK 1.5
//s.show(); // for JDK 1.4
}
public Sine(){}
public Sine(String title)
{
super(title);
}
public void itemStateChanged(ItemEvent e){ }
}
class P{
int marg=10, xorg=0, yorg=100, width=400, height=200;
double sx = 1.0, sy = 80.0;
int x, y, u, v;
public P(int u, int v){
this.u = u;
this.v = v;
UVtoXY();
}
public void UVtoXY(){
x = xorg + marg + (int)(sx*(double)u);
y = yorg + marg - (int)(sy*(double)v);
}
public void UVtoXY(double du, double dv){
x = xorg + marg + (int)(sx*du);
y = yorg + marg - (int)(sy*dv);
}
}
class MyCanvas extends Canvas{
public void paint(Graphics g) {
int i;
double u, v, frq=2.0;
P org = new P(0, 0);
P x400 = new P(400, 0);
P ypone = new P(0, 1);
P ymone = new P(0, -1);
g.drawLine(org.x, org.y, x400.x, x400.y);
g.drawLine(ypone.x, ypone.y, ymone.x, ymone.y);
P pold = new P(0, 0);
P pnew = new P(0, 0);
for(i = 0; i < 360 ; i=i+1) {
u = (double)i;
v = Math.sin(frq*u*Math.PI/180.0);
pnew.UVtoXY(u, v);
g.drawLine(pold.x, pold.y, pnew.x, pnew.y);
pold.x = pnew.x; pold.y = pnew.y;
}
}
}
谢谢haozi0079的回答, 那个监听我倒是会用, 只是不知道如何在main里面直接触发绘图~~~ 还请大家仔细说说~~ 展开
展开全部
编程时候不能把东西都写在main里面。。习惯不好,main里只要Sine s = new Sine("Sine curve"); 这句就够了,其他都放在constructor里。
如果在你这基础上改的话,重新绘图是不用main的,要用Cavans里面的repaint(),把MyCanvas cnv= new MyCanvas( )的cnv设为Sine的一个member
。在MyCavans里面新加一个member String s ;s代表“sin”“cos”“tan”,根据s的不同paint()里面添加 if else
在itemStateChanged,把event得出的string 然后 cnv.setS(String s);cnv.repaint();
如果在你这基础上改的话,重新绘图是不用main的,要用Cavans里面的repaint(),把MyCanvas cnv= new MyCanvas( )的cnv设为Sine的一个member
。在MyCavans里面新加一个member String s ;s代表“sin”“cos”“tan”,根据s的不同paint()里面添加 if else
在itemStateChanged,把event得出的string 然后 cnv.setS(String s);cnv.repaint();
展开全部
你可以给大菜单一个BOOL bL变量,再给要选择的小菜单一个BOOL bs变量,
如果bl == TRUE && bs == TRUE,那就是点击了,如果bl == TRUE && bs == FALSE ,就是没有点击。
或者你试试这个:给想监视的菜单添加ON_UPDATE_COMMAND_UI命令,如果它被点击了,则会有一些操作在这里执行
如果bl == TRUE && bs == TRUE,那就是点击了,如果bl == TRUE && bs == FALSE ,就是没有点击。
或者你试试这个:给想监视的菜单添加ON_UPDATE_COMMAND_UI命令,如果它被点击了,则会有一些操作在这里执行
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得程序写的挺好啊
public void itemStateChanged(ItemEvent e) {
if(e.getItem().equals("sin"))
{}
else if(e.getItem().equals("cos")){}
else if(e.getItem().equals("tan")){}
}
就能判断了阿?
public void itemStateChanged(ItemEvent e) {
if(e.getItem().equals("sin"))
{}
else if(e.getItem().equals("cos")){}
else if(e.getItem().equals("tan")){}
}
就能判断了阿?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询