这个程序,出现无规律的情况,有时第一次正常,有时第一次不正常,有时要运行几次又正常,不知何因?
本来正常情况下,几个buuton都应出来的,可是有时出来,有时不显示出来。代码如下:
import java.awt.Frame;
import java.awt.Button;
import java.awt.BorderLayout;
import java.awt.Color;
import java.applet.Applet;
import java.awt.Graphics;
import java.applet.Applet;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.event.WindowAdapter;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class FrameTest //implements MouseListener
{
static int xPoit;
static int yPoit;
static Graphics gp;
static int num=1;
public static void main(String[] args)
{
Frame f=new Frame("实例窗口");
f.setSize(600,400);
f.setLocation(100,100);
f.setVisible(true);
gp=f.getGraphics();
f.setLayout(new FlowLayout());
Button bt1=new Button("中");
Button bt2=new Button("东");
Button bt3=new Button("西");
Button bt4=new Button("南");
Button bt5=new Button("北");
f.add(bt1,"Center");
myActionListener ml=new myActionListener();
bt1.addActionListener(ml);
f.add(bt2,"East");
f.add(bt3,"West");
f.add(bt4,"South");
f.add(bt5,"North");
bt2.addActionListener(ml);
bt3.addActionListener(ml);
bt4.addActionListener(ml);
bt5.addActionListener(ml);
//f.setBackground(Color.RED);
f.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent emp)
{
xPoit=emp.getX();
yPoit=emp.getY();
}
public void mouseReleased(MouseEvent emd)
{
gp.drawOval(xPoit,yPoit,emd.getX()-xPoit,emd.getY()-yPoit);
System.out.println("画第"+FrameTest.num+"个圆");
FrameTest.num++;
}
});
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}}
class myActionListener implements ActionListener
{
Button gg;
public void actionPerformed(ActionEvent e)
{
gg=(Button)e.getSource();
//System.out.println(gg.getLabel());
//String str=e.getActionCommand();
if(gg.getLabel()=="中")
{
System.out.println("called program 1");
}
else
{
System.out.println("called program 2");
}
}
}
本来正常情况下,几个buuton都应出来的,可是有时出来,有时不显示出来。代码如下:
import java.awt.Frame;
import java.awt.Button;
import java.awt.BorderLayout;
import java.awt.Color;
import java.applet.Applet;
import java.awt.Graphics;
import java.applet.Applet;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.event.WindowAdapter;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class FrameTest //implements MouseListener
{
static int xPoit;
static int yPoit;
static Graphics gp;
static int num=1;
public static void main(String[] args)
{
Frame f=new Frame("实例窗口");
f.setSize(600,400);
f.setLocation(100,100);
f.setVisible(true);
gp=f.getGraphics();
f.setLayout(new FlowLayout());
Button bt1=new Button("中");
Button bt2=new Button("东");
Button bt3=new Button("西");
Button bt4=new Button("南");
Button bt5=new Button("北");
f.add(bt1,"Center");
myActionListener ml=new myActionListener();
bt1.addActionListener(ml);
f.add(bt2,"East");
f.add(bt3,"West");
f.add(bt4,"South");
f.add(bt5,"North");
bt2.addActionListener(ml);
bt3.addActionListener(ml);
bt4.addActionListener(ml);
bt5.addActionListener(ml);
//f.setBackground(Color.RED);
f.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent emp)
{
xPoit=emp.getX();
yPoit=emp.getY();
}
public void mouseReleased(MouseEvent emd)
{
gp.drawOval(xPoit,yPoit,emd.getX()-xPoit,emd.getY()-yPoit);
System.out.println("画第"+FrameTest.num+"个圆");
FrameTest.num++;
}
});
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}}
class myActionListener implements ActionListener
{
Button gg;
public void actionPerformed(ActionEvent e)
{
gg=(Button)e.getSource();
//System.out.println(gg.getLabel());
//String str=e.getActionCommand();
if(gg.getLabel()=="中")
{
System.out.println("called program 1");
}
else
{
System.out.println("called program 2");
}
}
}
解决方案 »
- 抽象类不能实例化的问题求助
- 求 Unicode转成GBK 的代码
- 请教:线程问题
- java开发工作好做吗
- 往Access中插入新数据时的主键问题
- 请教一个问题,帮我解决下,好吗?
- java 用什么IDE比较好些??最初级的应该选用哪个??
- 如何不同过命令行执行java写的程序
- 子类转成父类的问题,,和接口有关,我也不知道怎么描述了
- 谁知道jdbc2中的线程池类DBconnectionpool和DBconnectionManager的用法,真奇怪,好象没人提到这个问题?
- Java.net.Encoder encode 方法被deprecated了,请问新的方法是哪个呢
- 怎么把pl/sql代码转换成java代码?
修改后: 见红色字体import java.awt.Frame;
import java.awt.Button;
import java.awt.BorderLayout;
import java.awt.Color;
import java.applet.Applet;
import java.awt.Graphics;
import java.applet.Applet;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.event.WindowAdapter;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class FrameTest extends Frame //implements MouseListener
{
static int xPoit;
static int yPoit;
static Graphics gp;
static int num=1;
public static void main(String[] args)
{
Frame f=new Frame("实例窗口");
f.setSize(600,400);
f.setLocation(100,100);
gp=f.getGraphics(); f.setLayout(new FlowLayout());
Button bt1=new Button("中");
Button bt2=new Button("东");
Button bt3=new Button("西");
Button bt4=new Button("南");
Button bt5=new Button("北");
f.add(bt1,"Center");
myActionListener ml=new myActionListener();
bt1.addActionListener(ml); f.add(bt2,"East");
f.add(bt3,"West");
f.add(bt4,"South");
f.add(bt5,"North");
f.setVisible(true);
bt2.addActionListener(ml);
bt3.addActionListener(ml);
bt4.addActionListener(ml);
bt5.addActionListener(ml); //f.setBackground(Color.RED); f.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent emp)
{
xPoit=emp.getX();
yPoit=emp.getY();
} public void mouseReleased(MouseEvent emd)
{ gp.drawOval(xPoit,yPoit,emd.getX()-xPoit,emd.getY()-yPoit);
System.out.println("画第"+FrameTest.num+"个圆");
FrameTest.num++;
} }); f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
} });
} }
class myActionListener implements ActionListener
{
Button gg;
public void actionPerformed(ActionEvent e)
{
gg=(Button)e.getSource();
//System.out.println(gg.getLabel());
//String str=e.getActionCommand(); if(gg.getLabel()=="中")
{
System.out.println("called program 1"); }
else
{
System.out.println("called program 2"); } }
}
这样再试下吧
f.setLayout(new FlowLayout());
和
f.add(bt1,"Center");
f.add(bt2,"East");
f.add(bt3,"West");
f.add(bt4,"South");
f.add(bt5,"North");
矛盾f.add(bt1,"Center"); 这种方式是BorderLayout中添加组件的方式,既然已经设置为FlowLayout,那就不能这样添加,f.add(bt1); 这样才对,五个都改了就好了。另外,强烈建议楼主使用swing包中的组件,还有注意编码规范,老三我改了一下楼主东东,如下
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;public class FrameTest extends JFrame implements ActionListener
{
private static final long serialVersionUID = 3856883799347234725L;
private Container contentPane;
private JButton btnCenter;
private JButton btnEast;
private JButton btnWest;
private JButton btnSouth;
private JButton btnNorth;
private Graphics g;
private int x; private int y; private int num = 1; public static void main(String[] args) throws Exception
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new FrameTest();
}
public FrameTest()
{
contentPane = this.getContentPane();
btnCenter = new JButton("中");
btnEast = new JButton("东");
btnWest = new JButton("西");
btnSouth = new JButton("南");
btnNorth = new JButton("北");
this.setTitle("实例窗口");
contentPane.setLayout(new FlowLayout());
btnCenter.addActionListener(this);
btnEast.addActionListener(this);
btnWest.addActionListener(this);
btnSouth.addActionListener(this);
btnNorth.addActionListener(this);
contentPane.add(btnCenter);
contentPane.add(btnEast);
contentPane.add(btnWest);
contentPane.add(btnSouth);
contentPane.add(btnNorth);
contentPane.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
x = e.getX();
y = e.getY();
} public void mouseReleased(MouseEvent e)
{
g.drawOval(x, y, e.getX() - x, e.getY() - y);
System.out.println("画第" + num + "个圆");
num++;
}
});
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(600, 400);
this.setLocationRelativeTo(null);
this.setVisible(true);
g = contentPane.getGraphics();
}
public void actionPerformed(ActionEvent e)
{
JButton source = (JButton)e.getSource(); if(source.getText().equals("中"))
{
System.out.println("called program 1");
}
else
{
System.out.println("called program 2");
}
}
}
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;
import java.util.List;import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;public class DrawPane extends JComponent
{
private static final long serialVersionUID = -8963598853892068851L; private int startX = 0; private int startY = 0; private int endX = 0; private int endY = 0; private List<Draw> drawList = new ArrayList<Draw>(); private Color color = Color.BLUE; private Font font = new Font("Courier New", Font.BOLD, 14); private boolean drawing = false; public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
final DrawPane draw = new DrawPane();
JFrame frame = new JFrame();
frame.setTitle("Draw Demo");
frame.add(draw, BorderLayout.CENTER);
frame.setSize(500, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.WHITE);
frame.setVisible(true);
}
});
} public DrawPane()
{
super();
init();
} public void paintComponent(Graphics g)
{
super.paintComponent(g); for(Draw draw: drawList)
{
draw.draw(g);
} if(drawing)
{
g.drawString(endX + "," + endY, endX, endY);
g.drawLine(startX, startY, endX, endY);
}
} private void init()
{
addMouseListener(new MouseL());
addMouseMotionListener(new MouseMotionL());
addComponentListener(new ComponentL());
setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
} public Color getColor()
{
return color;
} public void setColor(Color color)
{
this.color = color;
} public Font getFont()
{
return font;
} public void setFont(Font font)
{
this.font = font;
} private class MouseL extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
startX = e.getX();
startY = e.getY();
drawList.add(new Text(font, color, startX, startY));
repaint();
} public void mouseReleased(MouseEvent e)
{
drawing = false;
endX = e.getX();
endY = e.getY();
drawList.add(new Line(font, color, startX, startY, endX, endY));
drawList.add(new Text(font, color, endX, endY));
repaint();
startX = 0;
startY = 0;
endX = 0;
endY = 0;
}
} private class MouseMotionL extends MouseMotionAdapter
{
public void mouseDragged(final MouseEvent e)
{
drawing = true;
endX = e.getX();
endY = e.getY();
repaint();
}
} private class ComponentL extends ComponentAdapter
{
public void componentResized(final ComponentEvent e)
{
repaint();
}
}
private class Line implements Draw
{
private int orgX = 0; private int orgY = 0; private int endX = 0; private int endY = 0; private Font font; private Color color; public Line(Font font, Color color, int orgX, int orgY, int endX, int endY)
{
this.orgX = orgX;
this.orgY = orgY;
this.endX = endX;
this.endY = endY;
this.color = color;
this.font = font;
} public void draw(Graphics g)
{
g.setFont(font);
g.setColor(color);
g.drawLine(orgX, orgY, endX, endY);
}
} private class Text implements Draw
{
private int orgX = 0; private int orgY = 0; private Font font; private Color color; public Text(Font font, Color color, int orgX, int orgY)
{
this.orgX = orgX;
this.orgY = orgY;
this.color = color;
this.font = font;
} public void draw(Graphics g)
{
Graphics2D g2d = (Graphics2D)g;
g2d.setStroke(new BasicStroke(2));
g.setFont(font);
g.setColor(color);
g.drawString(orgX + "," + orgY, orgX, orgY);
}
} private interface Draw
{
public void draw(Graphics g);
}
}
实际应用GUI的时候用Swing,我是想找出我这个用AWT写的怎么会出现这样的情况???import java.awt.Frame;
import java.awt.Button;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.event.WindowAdapter;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;public class FrameTest implements ActionListener
{
private int xPoit;
private int yPoit;
private Graphics gp;
private static int num=1;
private Button bt1;
private Button bt2;
private Button bt3;
private Button bt4;
private Button bt5;
FrameTest()
{
Frame f=new Frame("实例窗口");
f.setSize(600,400);
f.setLocation(100,100);
f.setVisible(true);
gp=f.getGraphics();
f.setLayout(new FlowLayout());
bt1=new Button("中");
bt2=new Button("东");
bt3=new Button("西");
bt4=new Button("南");
bt5=new Button("北");
f.add(bt1);
bt1.addActionListener(this);
f.add(bt2);
f.add(bt3);
f.add(bt4);
f.add(bt5);
bt2.addActionListener(this);
bt3.addActionListener(this);
bt5.addActionListener(this);
f.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent emp)
{
xPoit=emp.getX();
yPoit=emp.getY();
}
public void mouseReleased(MouseEvent emd)
{
gp.drawOval(xPoit,yPoit,emd.getX()-xPoit,emd.getY()-yPoit);
System.out.println("画第"+FrameTest.num+"个圆");
FrameTest.num++;
}
});
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public static void main(String[] args)
{
FrameTest ft=new FrameTest();
}
public void actionPerformed(ActionEvent e)
{
Button gg=(Button)e.getSource();
if(gg.getLabel()=="中"){
System.out.println("called program 1");
}else{
System.out.println("called program 2");
}
}
}