Swing Zeilenanzeige: JPanel als Header für JScrollPane

Status
Nicht offen für weitere Antworten.
Hi,


Vorab: Ich habe noch nicht viel Erfahrung mit GUI-Programmierung, also bitte nicht schlagen!
Ich möchte für meinen Editor in einem JScrollPane die Zeilennummern anzeigen lassen. Allerdings möchte ich auch, dass bei Bedarf einzelne Zeilennummern durch Symbole ersetzt werden können. Diese Symbole sollen dann auch Tooltips enthalten und auf Mausklicks reagieren können. Dafür benutze ich ein JPanel, bei dem nach Änderung der Zeilenanzahl die folgende Methode aufgerufen wird:

Java:
public void changeLineCount(int newval) {
    if (newval < lastLineCount) {
        // Remove some lines

        for (int i = newval ; i < lastLineCount ; i++) {
            remove(i);
        }
    } else {
        // Add some lines

        Element root = target.getDocument().getDefaultRootElement();
        TextUI targetUI = target.getUI();
        int start = lastLineCount == -1 ? 0 : lastLineCount;

        for (int i = start ; i < newval ; i++) {
            Element lElem = root.getElement(i);
            int offset = lElem.getStartOffset();
            Rectangle lineRect = null;

            try {
                lineRect = targetUI.modelToView(target, offset);
                lineRect.width = (int) getSize().getWidth();
            } catch (BadLocationException ex) {
                ex.printStackTrace();
            }

            LineHeader header = null;

            if (headers.size() > i) {
                header = headers.get(i);
            }

            if (header == null) {
                header = new DefaultLineHeader();
                headers.add(header);
            }

            header.setBounds(lineRect);
            header.setLine(i);
            header.shown();
            add(header);
        }
    }


    lastLineCount = newval;
    repaint();
}

Im Prinzip fügt sie also neue LineHeader (JLabels) hinzu oder entfernt sie, jenachdem wie sich die Zeilenanzahl geändert hat.
Das funktioniert aber nur so lange, bis gescrollt werden muss: Scrollt man an den oberen Rand, sieht man alle Labels korrekt, scrollt man weiter runter, werden sie plötzlich nicht mehr angezeigt. Ich denke das liegt daran, dass sich das Panel nicht automatisch vergrößert (ein Aufruf von getSize() bestätigt das), also hab ich einfach in die Funktion changeLineCunt() einen setSize() Aufruf gepackt, der die Höhe des Headers an die Höhe des Viewports anpasst. Leider hat das am Problem trotzdem nichts geändert: Die Labels werden nur bis zum unteren Rand angezeigt, wenn ganz nach oben gescrollt wurde.
Was mache ich falsch?

Danke im Voraus!
 

Ebenius

Top Contributor
:oops: Äußerst Freud'sch. :lol:

Ich würde mich beim Design eins zu eins an die JTableHeader-Klasse halten. Guck Dir den Quelltext an, genauso auch den Quelltext der BasicTableHeaderUI-Klasse. Und schreib dort so viel wie möglich ab. Ein JLabel pro Zeile ist sehr heftig. Manche Tabellen haben Millionen an Zeilen. Millionen JLabels sind sehr teuer. Deswegen lieber Renderer benutzen, genauso wie das auch der JTableHeader tut.

Ebenius
 
:oops: Äußerst Freud'sch. :lol:

Huch, da hab ich wohl halb geschlafen...


Ich würde mich beim Design eins zu eins an die JTableHeader-Klasse halten. Guck Dir den Quelltext an, genauso auch den Quelltext der BasicTableHeaderUI-Klasse. Und schreib dort so viel wie möglich ab. Ein JLabel pro Zeile ist sehr heftig. Manche Tabellen haben Millionen an Zeilen. Millionen JLabels sind sehr teuer. Deswegen lieber Renderer benutzen, genauso wie das auch der JTableHeader tut.

Ich hab mir den Code mal angesehen. Ich hatte gehofft, nicht zu tief in die Abgründe von Swing hinabsteigen zu müssen. Naja, soweit bin ich noch nicht, dass ich mir zutrauen würde das zu durchforschen. Aber soweit ich das verstanden habe werden dort immer nur die sichtbaren Komponenten gezeichnet. Ich habe mal versucht etwas ähnliches nachzubauen:

Java:
public void drawLines() {
    Container parent = getParent();
    Rectangle visible = null;
    removeAll();

    if (parent instanceof JViewport) {
        JViewport vp = (JViewport) parent;
        visible = vp.getViewRect();
    }

    Document doc = target.getDocument();
    Element root = doc.getDefaultRootElement();
    TextUI targetUI = target.getUI();

    try {
        for (int i = 0 ; i < root.getElementCount() ; i++) {
            Element elem = root.getElement(i);
            int start = elem.getStartOffset();
            Rectangle lineRect = targetUI.modelToView(target, start);
            lineRect.setLocation(3, lineRect.y - visible.y);
            lineRect.width = getSize().width;

            if (lineRect.y+lineRect.height < 0) {
                continue;
            }
            if (lineRect.y > visible.height) {
                continue;
            }

            JLabel label = new JLabel(""+(i+1));
            label.setBounds(lineRect);
            add(label);
        }
    } catch (BadLocationException ex) {
        ex.printStackTrace();
    }

    repaint();
}

Das wird aufgerufen, wenn sich die vertikale ScrollBar des JScrollPanes verschiebt. Das klappt auch ganz gut, aber es gibt einen kleinen Anzeigefehler: Wenn ich die ScrollBar mit gedrückter Maustaste verschiebe, dann springt das Zeilennummern-Panel wieder zum Anfang (Zeile 1), sobald ich loslasse. Woran kann das liegen?
 
Google hat mir hier ein halbwegs einfaches Beispiel gefunden. Sieht eigentlich ganz brauchbar aus. Hilft Dir das weiter?

Ich habe mal versucht das ganze so wie dort als Liste zu implementieren. Das funktioniert auch im Prinzip ganz gut, aber bei größeren Zeilenanzahlen ist das viel zu langsam (~10000 Zeilen sollten schon einigermaßen normal angezeigt werden können). Gibt es noch schnellere Wege, bei denen auch Icons anstelle der Zeilennummern stehen und Mausevents abgefangen werden können?
 

Ebenius

Top Contributor
Es gibt bestimmt schnellere Wege. Aber das macht mit Sicherheit einiges an Arbeit. :(

Das blöde ist, ich hab die Arbeit schonmal gemacht, ein JRowHeader mit UI-Delegate, Renderer, Editor, nicht auf JList sondern auf JComponent basierend. Den Quelltext hab ich aber nicht, weil ich nicht mehr in der selben Firma arbeite. Und rausgeben dürfte ich ihn auch nicht.

Mal schauen, ob ich Dir was zusammenfrickeln kann. Ich meld mich wieder.

Ebenius
 

Ebenius

Top Contributor
So - gestern Nacht hab ich dann grad einen JTableRowHeader mit Renderer, ValueProvider und UI-Delegate implementiert. Die Doku lässt noch zu wünschen übrig. Die Event-Behandlung (tableChanged(...) ist noch nicht optimiert, sondern ruft pauschal repaint(), unabhängig vom Event; das sollte man ggf. noch verbessern. Zu Ende getestet ist's auch nicht, können also gut noch ein paar Bugs drin sein. Aber im großen und ganzen sollte's funktionieren.

Das anhängende Archiv enthält diese Klassen/Interfaces und deren Quelltext:
Code:
[com]
   + [ebenius]
      + [widget]
         + [B]JTableRowHeader[/B]                          - [I]Row header implementation for the JTable class to be installed into the row header section of a scroll pane.[/I]
         + [B]JTableRowHeader.DefaultRowHeaderRenderer[/B] - [I]Default row header renderer, rendering the (view) row in a label.[/I]
         + [B]TableRowHeaderValueProvider[/B]              - [I]Value provider for the table row header class.[/I]
         + [plaf]
            + [B]TableRowHeaderUI[/B]                      - [I]UI delegate for the JTableRowHeader class.[/I]
            + [basic]
               + [B]BasicTableRowHeaderUI[/B]              - [I]Default TableRowHeaderUI implementation.[/I]
Hier mal eine kleine und eine erweiterte Test-Klasse.

TestGUI - Minimal
Java:
/* $Id$ */

/* Copyright 2009 Sebastian Haufe

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       [url]http://www.apache.org/licenses/LICENSE-2.0[/url]

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License. */

package com.ebenius.widget;

import java.awt.BorderLayout;

import javax.swing.*;

/**
 * Simple test UI for the {@link JTableRowHeader} class.
 */
public class JTableRowHeaderTestGUI {

  /**
   * Test main method.
   * 
   * @param args ignored
   */
  public static void main(String[] args) {
    final JTable table = new JTable(10000, 4);
    final JScrollPane scrollPane = new JScrollPane(table);
    final JTableRowHeader rowHeader = new JTableRowHeader();
    rowHeader.setTable(table);
    scrollPane.setRowHeaderView(rowHeader);
    table.setAutoCreateRowSorter(true);

    final JPanel contentPane = new JPanel(new BorderLayout(6, 6));
    contentPane.add(scrollPane);

    final JFrame f = new JFrame("JTableRowHeaderTestGUI"); //$NON-NLS-1$
    f.setContentPane(contentPane);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.setVisible(true);
  }
}
TestGUI - Komplexer mit Value Provider, eigenem Renderer, Mouse Listener
Java:
/* $Id$ */

/* Copyright 2009 Sebastian Haufe

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       [url]http://www.apache.org/licenses/LICENSE-2.0[/url]

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License. */

package com.ebenius.widget;

import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

/**
 * Simple test UI for the {@link JTableRowHeader} class.
 */
public class JTableRowHeaderTestGUI {

  /**
   * Test main method.
   * 
   * @param args ignored
   * @throws MalformedURLException
   */
  public static void main(String[] args) throws MalformedURLException {
    /* some test data */
    final DefaultTableModel tableModel = new DefaultTableModel(10000, 2);
    for (int i = 0; i < tableModel.getRowCount(); i++) {
      tableModel.setValueAt("Data Row " + i, i, 0); //$NON-NLS-1$
      tableModel.setValueAt(Math.random() > 0.8 ? "Icon" //$NON-NLS-1$
            : "Row Number", i, 1); //$NON-NLS-1$
    }

    /* sortable table with row header on scroll pane */
    final JTable table = new JTable(tableModel);
    final JScrollPane scrollPane = new JScrollPane(table);
    final JTableRowHeader rowHeader = new JTableRowHeader();
    rowHeader.setTable(table);
    scrollPane.setRowHeaderView(rowHeader);
    table.setAutoCreateRowSorter(true);
    table.setRowHeight(25);

    /* a value provider; an icon for every data row containing my letters only 

       Note: The default renderer shows the visible row number (based on 1) if
       the value provider is null or the value produced by the provider is
       null. */
    final URL iconUrl = new URL("http://i8t.de/znbl3c8z");//$NON-NLS-1$
    final Icon icon = new ImageIcon(iconUrl);
    rowHeader.setValueProvider(new TableRowHeaderValueProvider() {

      public Object getTableRowHeaderValueAt(
            TableModel dataModel,
            int rowIndex) {
        final Object value = dataModel.getValueAt(rowIndex, 1);
        return "icon".equalsIgnoreCase(String.valueOf(value)) //$NON-NLS-1$
              ? icon
              : null;
      }
    });

    /* a cell renderer capable of showing icons */
    rowHeader.setCellRenderer(new JTableRowHeader.DefaultRowHeaderRenderer() {

      /** Serial version UID */
      private static final long serialVersionUID = 7439315331651660028L;

      @Override
      protected void setValue(Object value) {
        if (value instanceof Icon) {
          setText(null);
          setIcon((Icon) value);
          setToolTipText("Icon Row Header Cell"); //$NON-NLS-1$
        } else {
          setIcon(null);
          super.setValue(value);
          setToolTipText("Default Row Header Cell"); //$NON-NLS-1$
        }
      }
    });

    /* info label for mouse events on the row header */
    final JTextArea infoTextField = new JTextArea(5, 40);
    infoTextField.setEditable(false);

    /* inform about mouse / mouse motion events on the row header */
    addMouseInfoListener(rowHeader, infoTextField);

    final JPanel contentPane = new JPanel(new BorderLayout(6, 6));
    contentPane.add(scrollPane, BorderLayout.CENTER);
    contentPane.add(new JScrollPane(infoTextField), BorderLayout.PAGE_END);

    /* test frame */
    final JFrame f = new JFrame("JTableRowHeaderTestGUI"); //$NON-NLS-1$
    f.setContentPane(contentPane);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.setVisible(true);
  }

  private static void addMouseInfoListener(
        final JTableRowHeader rowHeader,
        final JTextArea infoTextField) {
    final MouseAdapter mouseListener = new MouseAdapter() {

      private String getInfo(MouseEvent e) {
        final JTableRowHeader rowHeader = (JTableRowHeader) e.getSource();
        final int row = rowHeader.rowAtPoint(e.getPoint());
        if (row < 0) {
          return ""; //$NON-NLS-1$
        } else {
          return "Row: " //$NON-NLS-1$
                + row
                + " Header Value: " //$NON-NLS-1$
                + rowHeader.getValueAt(row)
                + '\n';
        }
      }

      @Override
      public void mouseClicked(MouseEvent e) {
        infoTextField.append("[Mouse Clicked] " + getInfo(e)); //$NON-NLS-1$
      }

      @Override
      public void mouseEntered(MouseEvent e) {
        infoTextField.append("[Mouse Entered] " + getInfo(e)); //$NON-NLS-1$
      }

      @Override
      public void mouseExited(MouseEvent e) {
        infoTextField.append("[Mouse Exited] " + getInfo(e)); //$NON-NLS-1$
      }

      @Override
      public void mousePressed(MouseEvent e) {
        infoTextField.append("[Mouse Pressed] " + getInfo(e)); //$NON-NLS-1$
      }

      @Override
      public void mouseReleased(MouseEvent e) {
        infoTextField.append("[Mouse Released] " + getInfo(e)); //$NON-NLS-1$
      }

      @Override
      public void mouseMoved(MouseEvent e) {
        infoTextField.append("[Mouse Moved] " + getInfo(e)); //$NON-NLS-1$
      }

      @Override
      public void mouseDragged(MouseEvent e) {
        infoTextField.append("[Mouse Dragged] " + getInfo(e)); //$NON-NLS-1$
      }
    };
    rowHeader.addMouseListener(mouseListener);
    rowHeader.addMouseMotionListener(mouseListener);
  }
}
Ich hoffe, Du kannst damit etwas anfangen. Wenn nicht: Frag nach!

Ebenius
 

Anhänge

  • ebenius.jwidget.tablerowheader.jar
    19,2 KB · Aufrufe: 6
Zuletzt bearbeitet:
Na das ist doch mal was! Ich habe deinen Code inzwischen so umschreiben können, dass er für meine JTextPanes funktioniert. Auch bei großen Zeilenanzahlen sehe ich bisher keine Performanceverluste und alles was ich wollte funktioniert wunderbar. Ich melde mich, falls ich doch noch ein Problem habe.

Vielen Dank für deine Hilfe und die Mühe, die du dir gemacht hast! [bitte Smiley einsetzen]
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Zwei JPanel übereianderlegen AWT, Swing, JavaFX & SWT 14
XWing Basic JPanel mit 2 Buttons beutzen. AWT, Swing, JavaFX & SWT 10
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
M clear JPanel before repainting AWT, Swing, JavaFX & SWT 1
B ImageIcon auf JPanel austauschen AWT, Swing, JavaFX & SWT 3
T Swing Reload JPanel + darin liegende ProgressBar AWT, Swing, JavaFX & SWT 9
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
F JPanel Celleditor AWT, Swing, JavaFX & SWT 8
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
Ich lerne Java. Swing Von JPanel A auf JPanel B zugreifen. AWT, Swing, JavaFX & SWT 4
A JPanel austauschen und Focus geben AWT, Swing, JavaFX & SWT 3
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
L JComponent aus JPanel anhand Mausposition ermitteln AWT, Swing, JavaFX & SWT 10
J JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
B Verschiebbares JPanel "ruckelt" im Randbereich AWT, Swing, JavaFX & SWT 2
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
L JPanel zeigt keinen Inhalt AWT, Swing, JavaFX & SWT 1
dereki2000 JPanel mit Rückgbe wie bei JOptionPane AWT, Swing, JavaFX & SWT 3
E Hintergrundfarbe setzen in JPanel funktioneirt nicht AWT, Swing, JavaFX & SWT 4
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
L Swing JPanel Größe anpassen AWT, Swing, JavaFX & SWT 6
D Platzierung von JTextfield in JPanel AWT, Swing, JavaFX & SWT 3
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Zwei JPanel übereinander nur vorderes "repainten" AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Button lässt sich nicht auf dem JPanel verschieben AWT, Swing, JavaFX & SWT 5
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing JPanel "ContentPane" wird nicht gesetzt/angezeigt AWT, Swing, JavaFX & SWT 16
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel wird in JScollPane nicht angezeigt AWT, Swing, JavaFX & SWT 2
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JPanel rotieren, Bild ist abgeschnitten, Clipping? AWT, Swing, JavaFX & SWT 0
M Swing JPanel flüssig verschieben AWT, Swing, JavaFX & SWT 5
G Nur ein JPanel wird angezeigt AWT, Swing, JavaFX & SWT 9
kilopack15 JPanel im laufenden Zustand einfärben AWT, Swing, JavaFX & SWT 2
kilopack15 JPanel Farbverwaltung AWT, Swing, JavaFX & SWT 1
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
A Swing JLabels in einer ForEach Schleife an den JPanel anheften (UNO Netzwerkspiel) AWT, Swing, JavaFX & SWT 1
L JPanel zeichnet im Konstrukter erzeugten Hintergrund nicht AWT, Swing, JavaFX & SWT 10
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
F Zeichnung einem JPanel im Layoutmanager zuweisen AWT, Swing, JavaFX & SWT 3
Meeresgott Swing Umgang mit JPanel AWT, Swing, JavaFX & SWT 4
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
K JPanel Bilder bei Windows nicht darstellbar AWT, Swing, JavaFX & SWT 6
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
J Swing Zeichenfläche im JPanel des Haupfenster anzeigen lassen AWT, Swing, JavaFX & SWT 4
A Swing JPanel zeigt Buttons nicht an AWT, Swing, JavaFX & SWT 4
R JPanel überzeichnet alles? AWT, Swing, JavaFX & SWT 1
D Von JPanel auf anderes JPanel zugreifen AWT, Swing, JavaFX & SWT 9
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
I JPanel - Verwaltung/ Anordnung AWT, Swing, JavaFX & SWT 4
T JComponents zur Laufzeit auf JPanel darstellen AWT, Swing, JavaFX & SWT 10
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
L ImageIcon auf JPanel wird nicht angezeigt(keiner Fehlermeldung) AWT, Swing, JavaFX & SWT 11
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
T JTextField Array im JPanel wird nicht komplett angezeigt AWT, Swing, JavaFX & SWT 7
K Swing JPanel ueber komplette Form legen AWT, Swing, JavaFX & SWT 1
W Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren AWT, Swing, JavaFX & SWT 2
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
I (JPanel) paintComponent mit Zeitverschiebung (Sleep/Wait) AWT, Swing, JavaFX & SWT 1
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
S jpanel anchor bottom AWT, Swing, JavaFX & SWT 1
thobren Swing Im JPanel wird nur TextArea gelöscht AWT, Swing, JavaFX & SWT 13
A JPanel größe verändern AWT, Swing, JavaFX & SWT 4
G JPanel komponente Löschen AWT, Swing, JavaFX & SWT 7
F JPanel "verschmelzen" GridLayout AWT, Swing, JavaFX & SWT 10
B Dropdown "Einstellungen" auf JPanel, transparent AWT, Swing, JavaFX & SWT 1
D GlassPane für JPanel AWT, Swing, JavaFX & SWT 2
F JPanel "zeichnet" keinen Text AWT, Swing, JavaFX & SWT 14
T Swing Index für Komponente in JPanel? AWT, Swing, JavaFX & SWT 6
Z Probleme mit JPanel's AWT, Swing, JavaFX & SWT 6
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
R JScrollPane überdeckt JPanel? AWT, Swing, JavaFX & SWT 7
O 2D-Grafik Zeichenfläche auf JPanel AWT, Swing, JavaFX & SWT 4
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
A JPanel Bild laden (Porblem mit Dateipfad) AWT, Swing, JavaFX & SWT 2
K Swing paintComponent, JPanel auslagern, ChangeEvents AWT, Swing, JavaFX & SWT 7
L GUI - Jpanel - Splitpane will nicht aktualisieren AWT, Swing, JavaFX & SWT 4
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
dat_vin Zeichenbrett (JPanel) AWT, Swing, JavaFX & SWT 10
K Swing JPanel nach oben und links vergrößern AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben