package src.de.sdsoft.objekte.gui;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.border.Border;
import src.de.sdsoft.objekte.gui.CustomLineBorder.LineStyle;
public class LineStyleCombox extends JComboBox {
private static final long serialVersionUID = 1L;
public LineStyleCombox() {
this.setModel(new DefaultComboBoxModel(getValueList().toArray()));
this.setRenderer(new LineStyleListCellRenderer());
}
private List getValueList() {
List<String> lineStyleList = new ArrayList<String>();
lineStyleList.add("solid");
lineStyleList.add("dash");
lineStyleList.add("dot");
return lineStyleList;
}
}
class LineStyleListCellRenderer extends DefaultListCellRenderer {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
JLabel lineLbl = new JLabel();
lineLbl.setPreferredSize(new Dimension(100, 5));
if (value != null) {
if (value.equals("dash")) {
lineLbl.setBorder(new CustomLineBorder(LineStyle.DASH));
} else if (value.equals("dot")) {
lineLbl.setBorder(new CustomLineBorder(LineStyle.DOTT));
} else if (value.equals("solid")) {
lineLbl.setBorder(new CustomLineBorder(LineStyle.SOLID));
}
}
JPanel groundPanel = new JPanel();
groundPanel.add(lineLbl);
groundPanel.setPreferredSize(new Dimension(100, 10));
return groundPanel;
}
}
class CustomLineBorder implements Border {
private final Insets INSETS = new Insets(1, 1, 1, 1);
private int length;
private int space;
enum LineStyle {
SOLID,DASH, DOTT;
}
public CustomLineBorder(LineStyle lineStyle) {
if (lineStyle.equals(LineStyle.DASH)) {
length = 5;
space = 2;
} else if (lineStyle.equals(LineStyle.DOTT)) {
length = 1;
space = 2;
} else if (lineStyle.equals(LineStyle.SOLID)) {
length = 5;
space = 0;
}
}
public CustomLineBorder(int length, int space) {
this.length = length;
this.space = space;
}
public boolean isBorderOpaque() {
return false;
}
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
g.setColor(Color.BLACK);
for (int i = 0; i < width; i += length) {
g.drawLine(i, y, i + length, y);
i += space;
}
}
public Insets getBorderInsets(Component c) {
return INSETS;
}
}