Browse Source
【问题原因】 1. 利用clone机制遍历搜索待查找对象 2. 在clone时应用主题色,从而得到同步主题色的大对象 3. 使用上述cloned大对象 【改动思路】 同上 【review建议】release/11.0
Starryi
2 years ago
9 changed files with 38 additions and 164 deletions
@ -1,144 +0,0 @@
|
||||
package com.fr.design.mainframe.theme.edit.ui; |
||||
|
||||
import com.fr.base.theme.FineColorManager; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
|
||||
import javax.swing.JPanel; |
||||
import java.awt.Color; |
||||
import java.awt.Dimension; |
||||
import java.awt.Graphics; |
||||
import java.awt.event.MouseEvent; |
||||
import java.awt.event.MouseListener; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author Starryi |
||||
* @version 1.0 |
||||
* Created by Starryi on 2021/8/7 |
||||
*/ |
||||
public class ColorListExtendedPane extends JPanel implements MouseListener { |
||||
public static final int DEFAULT_COLOR_COUNT = 8; |
||||
public static final int DEFAULT_EXTENDED_COUNT = 5; |
||||
public static final int DEFAULT_COLOR_SIZE = 16; |
||||
public static final int DEFAULT_COLOR_GAP = 3; |
||||
|
||||
public static final ExtendedColorComputer DEFAULT_EXTENDED_COMPUTER = new ExtendedColorComputer() { |
||||
@Override |
||||
public Color computeExtendedColor(Color color, int index, int count) { |
||||
return FineColorManager.computeExtendedColor(color, index, count); |
||||
} |
||||
}; |
||||
|
||||
private final boolean selectable; |
||||
private final int colorCount; |
||||
private final int extendedCount; |
||||
private final int boxSize; |
||||
private final int boxGap; |
||||
|
||||
private final List<Color> colorList = new ArrayList<>(); |
||||
private ExtendedColorComputer extendedColorComputer = DEFAULT_EXTENDED_COMPUTER; |
||||
|
||||
private int selectedColorIndex = -1; |
||||
private int selectedExtendedIndex = -1; |
||||
|
||||
public ColorListExtendedPane() { |
||||
this(false, DEFAULT_COLOR_COUNT, DEFAULT_EXTENDED_COUNT, DEFAULT_COLOR_SIZE, DEFAULT_COLOR_GAP); |
||||
} |
||||
|
||||
public ColorListExtendedPane(boolean selectable, int colorCount, int extendedCount, int boxSize, int boxGap) { |
||||
setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
this.selectable = selectable; |
||||
this.colorCount = Math.max(1, colorCount); |
||||
this.extendedCount = extendedCount; |
||||
this.boxSize = boxSize; |
||||
this.boxGap = boxGap; |
||||
|
||||
for (int i = 0; i < colorCount; i++) { |
||||
colorList.add(Color.WHITE); |
||||
} |
||||
|
||||
int width = colorCount * boxSize + (colorCount - 1) * boxGap; |
||||
int height = extendedCount * boxSize + (extendedCount - 1) * boxGap; |
||||
setPreferredSize(new Dimension(width, height)); |
||||
} |
||||
|
||||
public void populate(List<Color> colors) { |
||||
if (colors.size() > 0) { |
||||
colorList.clear(); |
||||
colorList.addAll(colors); |
||||
repaint(); |
||||
} |
||||
} |
||||
|
||||
public List<Color> update() { |
||||
return new ArrayList<>(colorList); |
||||
} |
||||
|
||||
public void setExtendedColorComputer(ExtendedColorComputer extendedColorComputer) { |
||||
this.extendedColorComputer = extendedColorComputer; |
||||
} |
||||
|
||||
@Override |
||||
public void mouseClicked(MouseEvent e) { |
||||
int x = e.getX(); |
||||
int y = e.getY(); |
||||
|
||||
int colorIndex = x / (boxSize + boxGap); |
||||
int colorX = colorIndex * (boxSize + boxGap); |
||||
|
||||
int extendedIndex = y / boxSize; |
||||
int extendedY = extendedIndex * boxSize; |
||||
|
||||
if (colorX <= x && x <= colorX + boxSize && extendedY <= y && y <= extendedY + boxSize) { |
||||
selectedColorIndex = colorIndex; |
||||
selectedExtendedIndex = extendedIndex; |
||||
} else { |
||||
selectedColorIndex = -1; |
||||
selectedExtendedIndex = -1; |
||||
} |
||||
repaint(); |
||||
} |
||||
|
||||
@Override |
||||
public void mousePressed(MouseEvent e) { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void mouseReleased(MouseEvent e) { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void mouseEntered(MouseEvent e) { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void mouseExited(MouseEvent e) { |
||||
|
||||
} |
||||
|
||||
public interface ExtendedColorComputer { |
||||
Color computeExtendedColor(Color color, int index, int count); |
||||
} |
||||
|
||||
@Override |
||||
public void paint(Graphics g) { |
||||
super.paint(g); |
||||
Color oldColor = g.getColor(); |
||||
|
||||
for (int i = 0; i < colorCount; i++) { |
||||
int x = i * (boxSize + boxGap); |
||||
for (int j = 0; j < extendedCount; j++) { |
||||
Color color = extendedColorComputer.computeExtendedColor(colorList.get(i), j, extendedCount); |
||||
g.setColor(color); |
||||
int y = j * (boxSize + boxGap); |
||||
g.fillRect(x, y, boxSize, boxSize); |
||||
} |
||||
} |
||||
|
||||
g.setColor(oldColor); |
||||
} |
||||
} |
Loading…
Reference in new issue