package zhuye;
|
|
import ui.UIConfig;
|
|
import javax.swing.*;
|
import java.awt.*;
|
import java.awt.event.*;
|
|
public class RemoteControlDialog extends JDialog {
|
private final Color THEME_COLOR;
|
|
public RemoteControlDialog(Component parent, Color themeColor) {
|
super(parent != null ? (JFrame) SwingUtilities.getWindowAncestor(parent) : null,
|
"遥控操作", false);
|
this.THEME_COLOR = themeColor;
|
setModalityType(ModalityType.MODELESS);
|
setAlwaysOnTop(true);
|
initializeDialog((int) (UIConfig.DIALOG_WIDTH * 0.8), (int) (UIConfig.DIALOG_HEIGHT / 3.0 * 0.7));
|
initializeRemoteContent();
|
if (parent == null) {
|
setLocationRelativeTo(null); // 居中显示
|
}
|
}
|
|
private void initializeDialog(int width, int height) {
|
setSize(width, height);
|
setLocationRelativeTo(getOwner());
|
setResizable(false);
|
getContentPane().setBackground(Color.WHITE);
|
}
|
|
private void initializeRemoteContent() {
|
JPanel contentPanel = new JPanel(new BorderLayout());
|
contentPanel.setBorder(BorderFactory.createEmptyBorder(16, 16, 16, 16));
|
contentPanel.setBackground(Color.WHITE);
|
|
ImageIcon forwardIcon = loadScaledIcon("image/go.png", 36, 36);
|
ImageIcon backwardIcon = loadScaledIcon("image/speedslow.png", 36, 36);
|
ImageIcon leftIcon = loadScaledIcon("image/left.png", 36, 36);
|
ImageIcon rightIcon = loadScaledIcon("image/right.png", 36, 36);
|
ImageIcon pressedIcon = loadScaledIcon("image/anxia.png", 36, 36);
|
|
JButton forwardBtn = createControlButton("前进", THEME_COLOR, forwardIcon, pressedIcon);
|
JButton backwardBtn = createControlButton("后退", new Color(255, 107, 107), backwardIcon, pressedIcon);
|
JButton turnLeftBtn = createControlButton("左转", new Color(96, 125, 139), leftIcon, pressedIcon);
|
JButton turnRightBtn = createControlButton("右转", new Color(96, 125, 139), rightIcon, pressedIcon);
|
|
JPanel forwardBackwardPanel = new JPanel();
|
forwardBackwardPanel.setOpaque(false);
|
forwardBackwardPanel.setLayout(new BoxLayout(forwardBackwardPanel, BoxLayout.Y_AXIS));
|
forwardBackwardPanel.add(Box.createVerticalGlue());
|
forwardBackwardPanel.add(forwardBtn);
|
forwardBackwardPanel.add(Box.createRigidArea(new Dimension(0, 16)));
|
forwardBackwardPanel.add(backwardBtn);
|
forwardBackwardPanel.add(Box.createVerticalGlue());
|
forwardBackwardPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 24));
|
|
JPanel turnPanel = new JPanel();
|
turnPanel.setOpaque(false);
|
turnPanel.setLayout(new BoxLayout(turnPanel, BoxLayout.Y_AXIS));
|
turnPanel.add(Box.createVerticalGlue());
|
JPanel turnButtonsRow = new JPanel(new FlowLayout(FlowLayout.RIGHT, 16, 16));
|
turnButtonsRow.setOpaque(false);
|
turnButtonsRow.add(turnLeftBtn);
|
turnButtonsRow.add(turnRightBtn);
|
turnPanel.add(turnButtonsRow);
|
|
contentPanel.add(forwardBackwardPanel, BorderLayout.WEST);
|
contentPanel.add(turnPanel, BorderLayout.CENTER);
|
|
getContentPane().add(contentPanel);
|
}
|
|
private JButton createControlButton(String text, Color background, ImageIcon icon, ImageIcon pressedIcon) {
|
JButton button = new JButton();
|
button.setFont(new Font("微软雅黑", Font.BOLD, 18));
|
button.setForeground(Color.WHITE);
|
button.setFocusPainted(false);
|
button.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
|
|
if (icon != null) {
|
button.setIcon(icon);
|
button.setText(null);
|
button.setContentAreaFilled(false);
|
button.setOpaque(false);
|
button.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
|
} else {
|
button.setText(text);
|
button.setBackground(background);
|
button.setOpaque(true);
|
button.setContentAreaFilled(true);
|
}
|
|
if (icon != null && pressedIcon != null) {
|
button.addMouseListener(new MouseAdapter() {
|
@Override
|
public void mousePressed(MouseEvent e) {
|
button.setIcon(pressedIcon);
|
}
|
|
@Override
|
public void mouseReleased(MouseEvent e) {
|
button.setIcon(icon);
|
}
|
|
@Override
|
public void mouseExited(MouseEvent e) {
|
if (!button.getModel().isPressed()) {
|
button.setIcon(icon);
|
}
|
}
|
});
|
}
|
|
return button;
|
}
|
|
private ImageIcon loadScaledIcon(String path, int width, int height) {
|
try {
|
ImageIcon icon = new ImageIcon(path);
|
if (icon.getIconWidth() <= 0 || icon.getIconHeight() <= 0) {
|
return null;
|
}
|
Image scaled = icon.getImage().getScaledInstance(width, height, Image.SCALE_SMOOTH);
|
return new ImageIcon(scaled);
|
} catch (Exception ex) {
|
System.err.println("加载图标失败: " + path + " - " + ex.getMessage());
|
return null;
|
}
|
}
|
}
|