SwingX Problem mit Scrollen von 2 JXTaskPaneContainer

Status
Nicht offen für weitere Antworten.

wynillo

Mitglied
ok irgendwo hab ich noch ein ziemliches Problem und zwar folgendes:
ich hab ein JScrollPane in dem ein Panel ist welches 2 JXTaskPaneContainer hat mit vielen
JXTaskPane's. Aber es kommen einfach keine ScrollBalken.
Wenn ich es allerdings direkt übergebe schon. (ähnliches Problem hier: Nabble - JDNC - JXTaskPaneContainer with scroll)

hier mein BeispielCode:

Java:
import java.awt.BorderLayout;

import javax.swing.JScrollPane;

import org.jdesktop.swingx.JXFrame;
import org.jdesktop.swingx.JXPanel;
import org.jdesktop.swingx.JXTaskPane;
import org.jdesktop.swingx.JXTaskPaneContainer;

public class ScrollTest extends JXPanel
{
	public static void main(String[] args)
	{
	JXFrame frame = new JXFrame("ScrollProblem",true);
	
	frame.setContentPane(new ScrollTest());
	frame.setBounds(50, 50, 300, 150);
	frame.setVisible(true);
	}

	public ScrollTest()
	{
		super(new BorderLayout());
		JXPanel panelView = new JXPanel(new BorderLayout());
		JXTaskPaneContainer leftPaneContainer = new JXTaskPaneContainer();
		JXTaskPaneContainer rightPaneContainer = new JXTaskPaneContainer();
		JXTaskPane[] panesLeft = new JXTaskPane[10];
		for (int i = 0; i < panesLeft.length; i++)
		{
			panesLeft[i] = new JXTaskPane();
			panesLeft[i].setTitle("Pane left #"+i);
			leftPaneContainer.add(panesLeft[i]);
		}
		JXTaskPane[] panesRight = new JXTaskPane[10];
		for (int i = 0; i < panesRight.length; i++)
		{
			panesRight[i] = new JXTaskPane();
			panesRight[i].setTitle("Pane right #"+i);
			rightPaneContainer.add(panesRight[i]);
		}
		panelView.add(leftPaneContainer, BorderLayout.WEST);
		panelView.add(rightPaneContainer, BorderLayout.CENTER);
		add(new JScrollPane (panelView,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
//		add(new JScrollPane(leftPaneContainer,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
	}
}

wo ist mein Problem / Fehler ???:L
 
Hat mich jetzt auch verblüfft, denn das sollte funktionieren. Und tut es auch, wenn Du panelView einfach ein JPanel (nicht JXPanel) sein läßt. Oder anders ausgedrückt: Du hast einen Fehler in JXPanel gefunden, den ich mal gleich beheben werde 🙂.

Bis dahin, mußt Du die getScrollableTracksViewportHeight überschreiben:

Java:
        JXPanel panelView = new JXPanel(new BorderLayout()) {

            @Override
            public boolean getScrollableTracksViewportHeight() {
                return getParent() instanceof JViewport
                   && (getParent().getHeight() > getPreferredSize().height);
            }
            
        };

Viel Spaß
Jeanette
 
geht auch einfacher (eigene api nicht kennen <g>):

Java:
panelView.setScrollableTracksViewportHeight(false);

Wie auch immer, ich hab mal einen bug report geschrieben: denn eigentlich kann ich mir keinen Fall vorstellen, in dem zu große Komponenten _nicht_ gescrollt werden sollen. Nur umgekehrt sieht es meist schöner aus, wenn eine zu kleine Komponente den ganzen scrollpane Bereich ausfüllt (und fühlt sich besser an, weil MouseEvents auch im sichtlich "leeren" Bereich ankommen).

https://swingx.dev.java.net/issues/show_bug.cgi?id=1187

Cheers
Jeanette
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben