private class MouseDemo extends JFrame implements MouseMotionListener{ int x,y; public MouseDemo() { //注册鼠标监听 jpl7.addMouseMotionListener(this); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 清空画板 jpl7.getGraphics().clearRect(0, 0, jpl7.getWidth(), jpl7.getHeight()); } }); } //重写JFrame的paint()方法 public void paint(Graphics g) { //设置画笔颜色 g.setColor(Color.black); //画一个实心圆 g.fillOval(x, y, 5, 5); } //鼠标移动的处理方法 public void mouseDragged(MouseEvent e) { //获取坐标 x=e.getX(); y=e.getY(); System.out.println(x); System.out.println(y); //重画,repaint()触发paint() this.repaint(); } //鼠标移动的处理方法 public void mouseMoved(MouseEvent e) { } }这段代码为什么不能使jpl7面板实现绘图
时间: 2024-02-10 18:20:19 浏览: 24
这段代码中的 `paint(Graphics g)` 是重写 `JFrame` 的方法,而不是重写面板 `jpl7` 的方法。因此,无论你在 `JFrame` 中调用 `repaint()` 方法多少次,都不会导致 `jpl7` 面板进行重绘。要实现 `jpl7` 面板的绘图功能,你需要在 `jpl7` 面板中重写 `paintComponent(Graphics g)` 方法,而不是在 `JFrame` 中重写 `paint(Graphics g)` 方法。
相关问题
private class MouseDemo extends JFrame implements MouseMotionListener{ int x,y; public MouseDemo() { //注册鼠标监听 jpl7.addMouseMotionListener(this); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 清空画板 jpl7.getGraphics().clearRect(0, 0, jpl7.getWidth(), jpl7.getHeight()); } }); } //重写JFrame的paint()方法 public void paint(Graphics g) { //设置画笔颜色 g.setColor(Color.black); //画一个实心圆 g.fillOval(x, y, 5, 5); } //鼠标移动的处理方法 public void mouseDragged(MouseEvent e) { //获取坐标 x=e.getX(); y=e.getY(); System.out.println(x); System.out.println(y); //重画,repaint()触发paint() this.repaint(); } //鼠标移动的处理方法 public void mouseMoved(MouseEvent e) { } 怎么重写jpl7的paintComponent方法
你可以在 `MouseDemo` 类中创建一个内部类,继承 `JPanel` 并重写 `paintComponent(Graphics g)` 方法来实现 `jpl7` 面板的绘图功能。代码如下所示:
```
private class MyPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// 在这里添加你的绘图代码
// 可以通过 Graphics 对象 g 来进行绘图
}
}
```
然后,在 `MouseDemo` 构造方法中创建一个 `MyPanel` 对象,并将其添加到 `JFrame` 中,代码如下所示:
```
public MouseDemo() {
MyPanel panel = new MyPanel();
panel.addMouseMotionListener(this);
jpl7.add(panel);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 清空画板
panel.getGraphics().clearRect(0, 0, panel.getWidth(), panel.getHeight());
}
});
}
```
这样就可以通过 `MyPanel` 类中重写的 `paintComponent(Graphics g)` 方法来实现 `jpl7` 面板的绘图功能了。
class LoginFrame extends JFrame { private JTextField usernameField; private JPasswordField passwordField; private JButton loginButton; public LoginFrame() { // 界面初始化 // ... } // getter和setter方法 // ... } 根据注释添加内容
可以根据注释添加以下内容:
- JTextField类型的usernameField属性声明,用于输入用户名。
- JPasswordField类型的passwordField属性声明,用于输入密码。
- JButton类型的loginButton属性声明,用于触发登录操作。
- LoginFrame构造函数,用于初始化登录界面。
- getter和setter方法,用于获取和设置用户名、密码和登录按钮的属性值。
完整代码如下:
```
class LoginFrame extends JFrame {
private JTextField usernameField; // 用户名输入框
private JPasswordField passwordField; // 密码输入框
private JButton loginButton; // 登录按钮
public LoginFrame() {
// 界面初始化
// ...
// 初始化用户名输入框
usernameField = new JTextField();
// 初始化密码输入框
passwordField = new JPasswordField();
// 初始化登录按钮
loginButton = new JButton("登录");
// 将输入框和登录按钮添加到登录界面
// ...
// 设置登录按钮的事件监听器
// ...
}
// getter和setter方法
public String getUsername() {
return usernameField.getText();
}
public void setUsername(String username) {
usernameField.setText(username);
}
public String getPassword() {
return new String(passwordField.getPassword());
}
public void setPassword(String password) {
passwordField.setText(password);
}
public void setLoginButtonEnabled(boolean enabled) {
loginButton.setEnabled(enabled);
}
}
```
这个类定义了一个登录界面,包括用户名输入框、密码输入框和登录按钮,并提供了相应的构造方法和getter/setter方法。