大家帮我看看,我想实现点击按钮就在Jpanel上打印一行字。。。

lixung 2007-12-04 04:14:03
class MyPanel extends JPanel
{
private JButton btn;
private JButton btn1;
private Graphics g = this.getGraphics();

public MyPanel()
{
btn = new JButton("click me");
add(btn);
btn1 = new JButton("click me");
add(btn1);
btn1.addActionListener(new actionClick());
btn.addActionListener(new actionClick());
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawLine(20,20,200,200);
}

class actionClick implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource()== btn1)
g.drawString("btn1 clicked",94,68);//此处如果换为System.out.println("btn clicked");////////////////////////////////////////////////则不会出现异常,为什么?
if(e.getSource()== btn)
g.drawString("btn clicked",50,80);//此处如果换为System.out.println("btn clicked");
/////////////////////////////////////////////则不会出现异常,为什么?

}
}
}

//运行之后,会有异常不知道是什么原因。
...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pudexiang 2007-12-05
  • 打赏
  • 举报
回复
以下代码根据理解你的意思所写,不知是否符合你的要求

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyPanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private JButton btn;
private JButton btn1;
private Graphics g;

private int x;//绘图的X坐标
private int y;//绘图的Y坐标

public MyPanel() {
btn = new JButton("click me1");
add(btn);

btn1 = new JButton("click me");
add(btn1);

btn1.addActionListener(new actionClick());
btn.addActionListener(new actionClick());

x = 100;
y = 100;
}

public void paint(Graphics g) {
update(g);
}

public void update(Graphics g) {
g = this.getGraphics();
g.drawString("btn clicked", x, y);
}

class actionClick implements ActionListener {
public void actionPerformed(ActionEvent e){
if(e.getSource() == btn1) {
x = 160;
y += 10;
update(g);
}

if(e.getSource() == btn) {
x = 100;
y += 10;
update(g);
}
}
}

public static void main(String arg[]) {
JFrame f = new JFrame();
f.add(new MyPanel());
f.setSize(400, 400);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
}
lixung 2007-12-04
  • 打赏
  • 举报
回复
这样在响应方法里直接画会有问题 那个全局g会是nullpointer

应该把响应处理放在paintComponent方法中 加上相应的条件判断来触发

用repaint方法来重绘

——————————————————————————————————
我想我点击button后才执行 g.drawString("btn1 clicked",94,68);
按你说的在paintComponent方法里做?
那我应该怎么做呢??????
lixung 2007-12-04
  • 打赏
  • 举报
回复
调试一下贝

以前用vs调试感觉很方便
现在eclipse很不爽

fangshk2007 eclipse怎么调试?能简单的说一下吗?
fangshk2007 2007-12-04
  • 打赏
  • 举报
回复
调试一下贝
dracularking 2007-12-04
  • 打赏
  • 举报
回复
这样在响应方法里直接画会有问题 那个全局g会是nullpointer

应该把响应处理放在paintComponent方法中 加上相应的条件判断来触发

用repaint方法来重绘
lixung 2007-12-04
  • 打赏
  • 举报
回复
大家给看看~~

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧