JScrollPane nachbauen (klitzekleiner Haken)

Status
Nicht offen für weitere Antworten.

gpxricky

Mitglied
Hi ihr alle,

ich versuche zur Zeit, eine JScrollPane nachzubauen. Nicht vom Prinzip, sondern einzig und allein vom Layout.
Nun sollte das eigentlich nicht so schwer sein - dachte ich zumindest.

Bis jetzt schaut meine "nachgebaute" ScrollPane noch so aus:

Code:
---------------------------------
|                          | /\ |
|                          |----|
|                          |    |
|                          |    |
|                          |    |
|                          |    |
|                          |    |
|                          |----|
|                          | \/ |
---------------------------------
|  < |                     | >  |
---------------------------------


Ich stehe nun vor dem großen Problem, dass ich am unteren, rechten Rand ein kleines Eckchen haben möchte, so dass die ScrollPane in etwa so ausschaut:

Code:
---------------------------------
|                          | /\ |
|                          |----|
|                          |    |
|                          |    |
|                          |    |
|                          |    |
|                          |    |
|                          |----|
|                          | \/ |
---------------------------------
|  < |                | >  |    |
---------------------------------

Mein Code sieht folgendermaßen aus, aber wie gesagt, schaffe ich es einfach nicht, das Eckchen vernünftig reinzukriegen, so dass es genauso breit und hoch wie der Button der ScrollBar ist. Vielleicht brauche ich einen anderen LayoutManager, aber ich habe echt schon alles versucht und wäre über Eure Hilfe sehr dankbar.

Code:
public class ScrollPane extends JPanel {

  private JPanel borderPanel = new JPanel();

  private JPanel mainScrollPanel = new JPanel();

  private JScrollBar verticalScrollBar = new JScrollBar(JScrollBar.VERTICAL);
  private JScrollBar horizontalScrollBar = new JScrollBar(JScrollBar.HORIZONTAL);

  private final static String STR_SETTINGS_TITLE = "Diagrammeinstellungen:";

  public ScrollPane() {
    this.setLayout(new BorderLayout());

    borderPanel.setBackground(Color.GREEN);

    mainScrollPanel.setLayout(new BorderLayout());

    mainScrollPanel.add(verticalScrollBar, BorderLayout.EAST);
    mainScrollPanel.add(horizontalScrollBar, BorderLayout.SOUTH);
    mainScrollPanel.add(borderPanel, BorderLayout.CENTER);

    this.add(ganttScrollPanel, BorderLayout.CENTER);

    // ... weitere Elemente werden noch draufgehauen, aber das spielt ja keine Rolle mehr!
  }
}

Grüßle

gpxricky
 

Wildcard

Top Contributor
Darf man fragen warum du eine JScrollPane nachbauen willst??? Du solltest deine Klasse ausserdem nicht ScrollPane nennen, da es diese Klasse schon im AWT gibt.
 

Sky

Top Contributor
Ich würde die Klasse von JScrollPane ableiten und die Methoden, die bei Dir anders sein sollen überschreiben...
 

gpxricky

Mitglied
Das GridBagLayout? Hm, leider verstehe ich nicht, wie ich das mit dem GridBagLayout lösen könnte, kann mir da vielleicht jemand ne Hilfe geben?
 

Sky

Top Contributor
Mit Hilfe des GridBagLayout kannst Du Contraints definieren, die das Aussehen der UI bestimmen... Ist z.B. im javabuch erklärt.

Aber trotzdem nochmal die Frage: Was ist dein Ziel? Warum baust Du eine vorhandene Komponente nach???
 

gpxricky

Mitglied
;-) Ok, ich versuchs mal zu erklären:

Also, ich will folgendes:

In einer Art Scrollpane soll sich ein JPanel befinden, dass jedoch nicht mit den ScrollBars der ScrollPane gesteuert werden soll. In dem JPanel befindet sich eine Art Diagramm, mit x- und y-Achse und dem enstprechenden Diagramm.

Ich weiß, dass mit der JScrollPane sowas in der Art möglich ist, eine x-Achse kann man z.B. mit columnHeader setzen, aber es gibt mehrere Probleme:

1.) In der ScrollPane muss sich zuerst ein "fester" JPanel befinden, erst darin soll das Diagramm mit den Achsen sein, dass scrollbar ist. Dieses feste JPanel benötige ich deshalb, um das gerade sichtbare Diagramm mittels der Bibliothek VectorGraphics zu exportieren (und am einfachsten ist es, VectorGraphics ein JPanel zu übergeben, die Bibliothek ruft dann die paint-Methode auf und schreibt sie in eine Datei).

2.) Die x-Achse, die man mit columnHeader setzen kann, befindet sich immer am oberen Rand des ScrollPanes, ich will ihn aber an den unteren Rand der Pane setzen.

Grüßle

gpxricky
 

gpxricky

Mitglied
Hm, ich bin heute morgen auf ne neue Idee gekommen. Man könnte ja auch die JScrollPane irgendwie umschreiben (und damit COLUMN_HEADER am unteren Rand ist, müsste man auch irgendwie ScrollPaneLayout umschreiben), so dass die Sache funktioniert.

Leider gibts aber immer ne NullPointerException :-(((

Hier der Code:

Code:
import javax.swing.*;
import java.awt.*;

public class DiagramScrollPane extends JScrollPane {
  private JScrollPane insideScrollPane = new JScrollPane(null,
      VERTICAL_SCROLLBAR_NEVER, HORIZONTAL_SCROLLBAR_NEVER);
  private JViewport insideViewport = new JViewport();

  public DiagramScrollPane() {
    setLayout(new ScrollPaneLayout.UIResource());
    setVerticalScrollBarPolicy(VERTICAL_SCROLLBAR_ALWAYS);
    setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_ALWAYS);

    // Zwei neue Zeilen
    insideViewport.setView(insideScrollPane);
    add(insideViewport, VIEWPORT);
    // Ende der neuen Zeilen

    setVerticalScrollBar(createVerticalScrollBar());
    setHorizontalScrollBar(createHorizontalScrollBar());
    setOpaque(true);
    updateUI();

    if (!this.getComponentOrientation().isLeftToRight()) {
        viewport.setViewPosition(new Point(Integer.MAX_VALUE, 0));
    }
  }
   
  public void setViewportView(Component view) {
    insideScrollPane.setViewportView(view);
  }
  
  public JViewport getViewport() {
    return insideScrollPane.getViewport();
  }

  public void setRowHeaderView(Component view) {
    insideScrollPane.setRowHeaderView(view);
  }
  
  public JViewport getRowHeader() {
      return insideScrollPane.getRowHeader();
  }


  public void setColumnHeaderView(Component view) {
    insideScrollPane.setColumnHeaderView(view);
  }
  
  public JViewport getColumnHeader() {
      return insideScrollPane.getColumnHeader();
  }
}

Ich krieg die Sache echt nicht hin und bräuchte wirklich dringend Hilfe :-(((
 

Sky

Top Contributor
Die Methode DiagramScrollPane#getViewport liefert eine NullPointerException, weil 'insideScrollPane' noch nicht initialisiert ist!
 

Illuvatar

Top Contributor
Wenn du GBL nimmst, hier mal als Tip die ersten Eigenschafte die in den GridBagConstraints sein müssten, in der Reihenfolge wie im Konstruktor:
Der Viewport: 0, 0, 1, 1, 1, 1, CENTER, BOTH
Rechter Scrollbalken: 1, 0, 1, 1, 0, 1, CENTER, HORIZONTAL
Unterer Scrollbalken: 0, 1, 1, 1, 1, 0, CENTER, VERTICAL
 

gpxricky

Mitglied
Hey, wow, tausend Dank!
Die Sache mit dem GridBagLayout war wirklich genial und wenn mans mal verstanden hat, ist es eigentlich auch ziemlich simpel. Nochmals danke für eure Hilfe ;-)

gpxricky
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
B Swing JScrollPane scrollt nicht AWT, Swing, JavaFX & SWT 10
P JTextarea (in JScrollPane) zeigt nur die beiden letzten Einträge an? AWT, Swing, JavaFX & SWT 0
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
E wie in JScrollPane auf JTextArea zugreifen AWT, Swing, JavaFX & SWT 12
N Swing JScrollPane mit Tastatur bedienen? AWT, Swing, JavaFX & SWT 0
F JScrollPane anzeige AWT, Swing, JavaFX & SWT 7
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
P Swing JEditorPane in Kombination mit JScrollPane AWT, Swing, JavaFX & SWT 29
S Swing jScrollPane - pro Eintrag der Liste, die jCheckBoxes Speichern die in dem Eintrag aktiviert wurden AWT, Swing, JavaFX & SWT 2
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
D JScrollPane in JTabbedPane AWT, Swing, JavaFX & SWT 3
MaxG. Swing JScrollPane AWT, Swing, JavaFX & SWT 10
Soloeco Swing JScrollPane AWT, Swing, JavaFX & SWT 6
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
J JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 5
B LayoutManager GridBagLayout und JScrollPane AWT, Swing, JavaFX & SWT 5
Thallius JScrollPane Scrollpos setzen nach Neuzeichnen AWT, Swing, JavaFX & SWT 3
P MalProgramm mit JScrollPane und Canvas AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
U JScrollPane -> JTabbedPane u.A. AWT, Swing, JavaFX & SWT 3
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
W Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren AWT, Swing, JavaFX & SWT 2
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
Bluedaishi JScrollpane AWT, Swing, JavaFX & SWT 0
L JScrollPane scrollt nicht !! AWT, Swing, JavaFX & SWT 3
F JScrollPane Position setzen (x=0, y=0) AWT, Swing, JavaFX & SWT 2
R JScrollPane überdeckt JPanel? AWT, Swing, JavaFX & SWT 7
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
S JScrollPane und BorderLayout AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
F JTable mit JScrollPane AWT, Swing, JavaFX & SWT 4
I JPanel in JScrollPane verkleinert sich leider nicht .... AWT, Swing, JavaFX & SWT 2
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
B Swing JPanel in JScrollPane einfügen AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Transparentes JScrollPane AWT, Swing, JavaFX & SWT 0
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
R Ändern Default-Verhalten von JScrollpane in einer JScrollpane AWT, Swing, JavaFX & SWT 1
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
A JScrollPane - ScrollBar Buttongröße verändern AWT, Swing, JavaFX & SWT 1
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
A Swing JScrollPane Problem AWT, Swing, JavaFX & SWT 6
H Swing JScrollPane mit "viel Inhalt" scrollt zu langsam (inkl. See-For-Yourself.jar :D) AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane in JScrollPane - Problem AWT, Swing, JavaFX & SWT 3
K Bug in JScrollPane? AWT, Swing, JavaFX & SWT 4
T Swing JScrollPane Farbe der Scrollbar AWT, Swing, JavaFX & SWT 3
M JScrollPane Header AWT, Swing, JavaFX & SWT 3
G JScrollPane über JScrollPane AWT, Swing, JavaFX & SWT 2
V LayoutManager JScrollPane verwirft Elementanordnung AWT, Swing, JavaFX & SWT 3
B JScrollPane Problem AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane AWT, Swing, JavaFX & SWT 7
H cardlayout und jscrollpane AWT, Swing, JavaFX & SWT 14
F 2D-Grafik Skalieren der Scrollbars beim Zoomen einer JScrollPane AWT, Swing, JavaFX & SWT 4
B JScrollPane Horizontal klappt nicht. AWT, Swing, JavaFX & SWT 4
G JScrollPane reagiert nicht auf Änderung der JPanel-Größe AWT, Swing, JavaFX & SWT 4
C jPanel auf jScrollPane zentrieren AWT, Swing, JavaFX & SWT 3
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
U Swing JPane und JScrollpane in JSplitpane-Seite: Scrollen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A Swing Korrekte JTable.rowAt(point) für JTable in JScrollPane AWT, Swing, JavaFX & SWT 5
D Label über JScrollPane AWT, Swing, JavaFX & SWT 3
S JScrollPane reagiert nicht AWT, Swing, JavaFX & SWT 3
X JScrollPane zu JTable hinzufügen AWT, Swing, JavaFX & SWT 16
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
D LayoutManager JScrollPane mit dynamischem Inhalt AWT, Swing, JavaFX & SWT 8
P Swing JScrollpane AWT, Swing, JavaFX & SWT 2
B JScrollPane scrollt nicht immer automatisch AWT, Swing, JavaFX & SWT 2
V Swing JScrollPane Viewport verschieben AWT, Swing, JavaFX & SWT 2
J JScrollPane Probleme AWT, Swing, JavaFX & SWT 3
S Swing JScrollPane verliert Scrollbars AWT, Swing, JavaFX & SWT 5
D Swing JTable in JScrollpane beliebig verbreitern AWT, Swing, JavaFX & SWT 5
A Swing Anzeige Text in JScrollpane AWT, Swing, JavaFX & SWT 8
J Swing Unteren Abstand für JTable in JScrollPane festlegen AWT, Swing, JavaFX & SWT 10
xehpuk Swing Line-wrapping von JTextPane (in JScrollPane) AWT, Swing, JavaFX & SWT 3
M JScrollPane Problem AWT, Swing, JavaFX & SWT 6
S Swing JScrollpane und ViewPort AWT, Swing, JavaFX & SWT 4
D JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 12
X JScrollPane funzt net... AWT, Swing, JavaFX & SWT 5
H jscrollpane AWT, Swing, JavaFX & SWT 12
RELAXccc Swing JTree + JScrollPane, refresh Problem AWT, Swing, JavaFX & SWT 17
A Problem mit JScrollPane in einer JScrollpane AWT, Swing, JavaFX & SWT 4
B JScrollPane Problem AWT, Swing, JavaFX & SWT 25
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
P Swing JScrollPane-Inhalt: Grösse anpassen AWT, Swing, JavaFX & SWT 6
G Swing Höhe des View eines JScrollPane fest auf Höhe des JScrollPane setzen! AWT, Swing, JavaFX & SWT 4
A JScrollPane AWT, Swing, JavaFX & SWT 16
C Swing JScrollPane und Scroll-Geschwindigkeit AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben