编写一个java程序在窗口的最上方旋转一个Jlable标签,标签中默认的文本如 图1所示。2.为窗口添加一个鼠标事件,当单击鼠标时,坐标显示如图2所示。 此处显示鼠标右键点击的坐标
时间: 2024-10-19 11:08:43 浏览: 16
在Java中,为了实现这样的功能,你需要使用Swing库来创建GUI应用程序,并结合鼠标监听事件。以下是一个简单的示例,展示如何在一个JFrame窗口上创建一个可以旋转的JLabel以及处理鼠标点击事件:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Main {
public static void main(String[] args) {
// 创建一个新的JFrame窗口
JFrame frame = new JFrame("Rotating Label and Mouse Click Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
// 创建一个JLabel并设置其默认文本
JLabel label = new JLabel("图1", SwingConstants.CENTER);
label.setFont(new Font(Font.MONOSPACED, Font.BOLD, 24));
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVerticalAlignment(SwingConstants.CENTER);
// 添加鼠标事件监听器
label.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
System.out.println("鼠标右键点击坐标: (" + x + ", " + y + ")");
}
});
// 创建一个容器布局管理器,比如FlowLayout用于将标签置于窗口中央
Container contentPane = frame.getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(label);
// 每90度旋转label的位置,这里只是一个模拟动画,实际上你可以通过定时任务或者更复杂的动画实现
Timer timer = new Timer(500, event -> {
int angle = (int) Math.random() * 360; // 随机角度
label.rotate(angle);
label.repaint();
});
timer.start();
// 显示窗口
frame.setVisible(true);
}
private static void rotate(JLabel label, int angle) {
Graphics2D g = (Graphics2D) label.getGraphics();
AffineTransform originalTransform = g.getTransform();
g.rotate(Math.toRadians(angle), label.getWidth() / 2, label.getHeight() / 2);
g.drawString(label.getText(), 0, 0);
g.setTransform(originalTransform);
}
}
```
阅读全文