使用eclipse模仿汽车中控系统屏幕滑动功能 相关代码
时间: 2024-03-20 21:41:01 浏览: 14
以下是一个简单的模拟控制器的示例代码:
```
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class CarController extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JPanel screenPanel;
private JButton leftButton;
private JButton rightButton;
private int currentScreen = 0;
private int maxScreens = 3;
private int screenOffset = 0;
private Timer timer;
public CarController() {
screenPanel = new ScreenPanel();
leftButton = new JButton("<<");
rightButton = new JButton(">>");
leftButton.addActionListener(this);
rightButton.addActionListener(this);
JPanel buttonPanel = new JPanel();
buttonPanel.add(leftButton);
buttonPanel.add(rightButton);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(screenPanel, BorderLayout.CENTER);
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
timer = new Timer(10, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (screenOffset == 0) {
timer.stop();
} else {
screenOffset--;
screenPanel.repaint();
}
}
});
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == leftButton) {
if (currentScreen == 0) {
return;
}
currentScreen--;
screenOffset = screenPanel.getWidth();
timer.start();
} else if (e.getSource() == rightButton) {
if (currentScreen == maxScreens - 1) {
return;
}
currentScreen++;
screenOffset = -screenPanel.getWidth();
timer.start();
}
}
public static void main(String[] args) {
CarController controller = new CarController();
controller.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
controller.setSize(new Dimension(800, 600));
controller.setVisible(true);
}
class ScreenPanel extends JPanel {
private static final long serialVersionUID = 1L;
public void paintComponent(Graphics g) {
super.paintComponent(g);
int x = screenOffset;
int y = 0;
int width = getWidth();
int height = getHeight();
switch (currentScreen) {
case 0:
g.setColor(Color.BLUE);
g.fillRect(x, y, width, height);
break;
case 1:
g.setColor(Color.GREEN);
g.fillRect(x, y, width, height);
break;
case 2:
g.setColor(Color.RED);
g.fillRect(x, y, width, height);
break;
}
}
}
}
```
该代码创建了一个 `JFrame`,包含一个 `JPanel` 展示屏幕和两个 `JButton` 控制屏幕滑动。`ScreenPanel` 类是一个自定义的 `JPanel`,用于绘制屏幕内容。在 `paintComponent` 方法中,我们根据当前屏幕的索引绘制不同的矩形。
在 `actionPerformed` 方法中,我们检查哪个按钮被点击,并根据当前屏幕的索引和屏幕宽度计算出新的屏幕偏移量。然后,我们启动一个 `Timer`,该计时器每次调用时将屏幕偏移量逐渐减小,直到达到 0。在每次偏移时,我们调用 `repaint` 来强制重新绘制 `ScreenPanel`。