ADD file via upload

main
p6xlcrq3f 4 months ago
parent 3305ed6720
commit fef276e424

@ -0,0 +1,97 @@
package cn.edu.caztc.sokobangame;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ThemeSelectorDialog extends JDialog {
public ThemeSelectorDialog(JFrame parent) {
super(parent, "选择主题", true);
setSize(600, 650);
setLocationRelativeTo(parent);
setLayout(new BorderLayout());
JPanel mainPanel = new JPanel(new GridLayout(MapConfig.THEMES.length, 1, 10, 10));
mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
ButtonGroup group = new ButtonGroup();
String[] iconNames = {"墙", "地板", "空箱子", "箱子", "箱子点", "玩家一", "玩家二"};
for (int i = 0; i < MapConfig.THEMES.length; i++) {
// 主主题面板
JPanel themePanel = new JPanel(new BorderLayout());
themePanel.setBorder(BorderFactory.createTitledBorder(MapConfig.THEMES[i]));
// 图标面板包含7个图标
JPanel iconsPanel = new JPanel(new GridLayout(1, 7, 5, 5));
for (int j = 0; j < 7; j++) {
// 单个图标的容器面板
JPanel iconPanel = new JPanel(new BorderLayout());
iconPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
// 缩放并添加图片
ImageIcon icon = getThemeIcon(i, j);
ImageIcon scaledIcon = new ImageIcon(icon.getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH));
JLabel iconLabel = new JLabel(scaledIcon, JLabel.CENTER);
iconPanel.add(iconLabel, BorderLayout.CENTER);
// 添加图片名称标签
JLabel nameLabel = new JLabel(iconNames[j], JLabel.CENTER);
iconPanel.add(nameLabel, BorderLayout.SOUTH);
iconsPanel.add(iconPanel);
}
// 添加单选按钮
JRadioButton radioButton = new JRadioButton("选择此主题");
radioButton.setSelected(i == MapConfig.ThemeManager.getCurrentTheme());
radioButton.addActionListener(new ThemeSelectListener(i));
group.add(radioButton);
// 将图标面板和单选按钮放入容器
JPanel contentPanel = new JPanel(new BorderLayout());
contentPanel.add(iconsPanel, BorderLayout.CENTER);
contentPanel.add(radioButton, BorderLayout.SOUTH);
themePanel.add(contentPanel, BorderLayout.CENTER);
mainPanel.add(themePanel);
}
add(mainPanel, BorderLayout.CENTER);
JButton closeButton = new JButton("关闭");
closeButton.addActionListener(e -> dispose());
add(closeButton, BorderLayout.SOUTH);
}
private ImageIcon getThemeIcon(int themeIndex, int iconIndex) {
int savedTheme = MapConfig.ThemeManager.getCurrentTheme();
MapConfig.ThemeManager.setCurrentTheme(themeIndex);
ImageIcon icon = MapConfig.getThemeIcon(iconIndex);
MapConfig.ThemeManager.setCurrentTheme(savedTheme);
return icon;
}
private class ThemeSelectListener implements ActionListener {
private int themeIndex;
public ThemeSelectListener(int themeIndex) {
this.themeIndex = themeIndex;
}
@Override
public void actionPerformed(ActionEvent e) {
MapConfig.ThemeManager.setCurrentTheme(themeIndex);
// 刷新游戏界面
if (SwingUtilities.getWindowAncestor((Component)e.getSource()) instanceof MainGame) {
((MainGame)SwingUtilities.getWindowAncestor((Component)e.getSource())).refreshGame();
} else if (SwingUtilities.getWindowAncestor((Component)e.getSource()) instanceof DualGame) {
((DualGame)SwingUtilities.getWindowAncestor((Component)e.getSource())).refreshGameDisplay();
}
}
}
}
Loading…
Cancel
Save