Swing Suche nach Kurveneditor (UI-Element)

stroggi

Mitglied
Hallo zusammen,

für ein aktuelles Projekt suche ich die Möglichkeit benutzerdefinierte Kurven anlegen zu lassen. Hierbei würde ich gerne folgenden Aufbau vorsehen:
  • In einer Art Tabelle können in einzelnen Zeilen Kurven erstellt werden. Die Länge einer Kurve bestimmt sich aus der Länge der aktuell längsten Kurve.
  • Kurven können jederzeit nach der letzten Zeile hinzugefügt werden und Kurven können in der Reihenfolge verschoben werden.
  • Zur Bearbeitung der Kurven schwebt mir vor, dass der Benutzer an einer beliebigen Stelle in einer bestehenden Kurve per Mausklick einen neuen Kurvenpunkt hinzufügen kann. Bestehende Kurvenpunkte sollen auch verschoben werden können (sowohl in x- als auch in y-Richtung).
  • Die Kurven sollen über einen "Player" abgespielt werden (analoge Signale werden über Hardware ausgegeben). Hierzu soll über einen senkrechten farbigen Strich die aktuelle Position angezeigt werden.
  • Zu guter Letzt sollte man natürlich auch in die Kurve hinein und herauszoomen können, wobei lediglich die y-Achse gestreckt wird.
Als "Verdeutlichung"(?) habe ich noch eine kleine Skizze angefügt.

Lange Rede kurzer Sinn: Ich suche nach einem Modul, welches mir diese Funktionalitäten zur Verfügung stellt, konnte selbst jedoch leider noch nichts finden. Wäre super, wenn mir jemand von euch einen Tipp geben könnte wo ich so etwas finden könnte, oder mit welchem Ansatz ich das selbst auf die Beine stellen könnte.

Viele Grüße
Michael
 

Anhänge

  • skizzeUI.png
    skizzeUI.png
    184,2 KB · Aufrufe: 63
Hi zusammen,

leider bin ich noch nicht auf eine Lösung für mein Problem gestoßen.
Ich habe mich nun jedoch drangesetzt eine eigene Lösung für mein Problem zu finden und bin hergegangen und habe den Cell-Renderer einer JTable ausgetauscht. Die Tabelle besteht aus nur einer Spalte und in jeder Zeile soll eine neue Kurve erstellt werden können. Am Ende der Tabelle wird eine zusätzliche Zeile eingetragen, welche zum Erstellen neuer Zeilen genutzt werden soll.

Hier ein Beispiel für das Zellenelement der letzten Zeile:
Java:
public class SequenceChannelAddItem extends HGUITableCustomCell {
    private static final long serialVersionUID = 9136008607705123332L;

    public SequenceChannelAddItem()
    {
        super();
        this.setLocation(0, 0);
        this.setSize(1500, 50);
        this.setBounds(0, 0, 1500, 50);
        this.setMinimumSize(this.getSize());
        this.setMaximumSize(this.getSize());
       
        System.out.println(this.getSize());
    }

    public void paintComponent(Graphics g)
    {
        //super.paintComponent(g);
       
        int startPos = 0;
       
        while (startPos < this.getWidth())
        {
            g.setColor(Color.WHITE);
            g.fillRect(startPos, 0, this.getHeight(), this.getHeight());
           
            g.setColor(Color.BLACK);
            g.fillRect(startPos +15, 23, 20, 4);
            g.fillRect(startPos +23, 15, 4, 20);
           
            startPos += this.getHeight();
        }
    }
}

Es klappt nun soweit, dass die Zellenelemente soweit korrekt dargestellt werden, allerdings wird bei der Anpassung der Spaltenbreite nicht automatisch der horizontale Scrollbalken dargestellt. Die Breite der Spalte wird aktuell über den Cell-Renderer modifiziert, da die Spalte in der Tabelle sich automatisch an das breiteste Zellenelement anpassen soll:
Java:
 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            if (value instanceof HGUITableCustomCell) {
                HGUITableCustomCell customCell = (HGUITableCustomCell)value;
               
                if (customCell.getHeight() > 0)
                    table.setRowHeight(row, customCell.getHeight());
               
                if (customCell.getWidth() > 0) {
                    table.getColumnModel().getColumn(column).setMinWidth(customCell.getWidth());
                }
               
                return customCell;
            } else {
                HGUITableItemModel tbm = (HGUITableItemModel)table.getModel();
                Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                c.setBackground(tbm.getRowColour(row));
                return c;
            }
        }

Die Breite der Spalte scheint hingegen korrekt angepasst zu werden, da der Text in der Titelzeile korrekt verschoben wird (siehe Bild im Anhang).

Weiß jemand von euch hier Rat? Wie bekomme ich es hin, dass ich in der Tabelle nun auch horizontal scrollen kann?

Viele Grüße
Michael
 

Anhänge

  • sequenceTest0.png
    sequenceTest0.png
    3,7 KB · Aufrufe: 56

Neue Themen


Zurück
Oben