JCombobox mit Linien Styles

delphiking1980

Bekanntes Mitglied
Hallo,

ich suche eine Combobox welche mir die verschiedenen Linienstyles repräsentiert gibt es da schon etwas oder muss das selber programmiert werden.

Habe mir schon eine ColorCombox gebaut und so ähnlich wird das wohl auch mit den Linien klappen denke ich mal.

Danke für jede hilfe....
 
In Standard-Swing gibt es das nicht. Ob es in diverse Zusatzbibliotheken (SwingX etc.) gibt, weiß ich nicht.
Zum Selbermachen: Eigenen ListCellRenderer machen und den deiner ComboBox geben.
 
Nun ja, ich denke dafür musst du schon eine eigene Komponente als Renderer nehmen und dort in der
Code:
paintComponent()
das Zeichen, was du haben willst. Ich bin mir relativ sicher, dass es über Graphics schon Methoden gibt um gestrichelte Linien etc. zu Zeichnen.
 
Schön wenn man seine Fragen selber beantworten kann :

Das ist meine Lösung (gemischt mit einer aus dem Internet)

Java:
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;
    }
}
 

Zurück
Oben