NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: JScrollPane horizontální scrollbar nad obsahem

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
vojta3310
Člen
Avatar
vojta3310:15.6.2017 19:36

Ahoj, chtěl bych se zeptat jestli se nechá umístit scrollbar v JScrollPane nahoru a jak? Už delší dobu googlím ale k tomuto problému jsem našel jen jednu nezodpovězenou otázku.
Moc děkuji za odpověď.

(Nevím jestli jsem to dostatečně popsal > obrázek to dovysvětlí)

 
Odpovědět
15.6.2017 19:36
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:15.6.2017 23:51

Vcelku by mě zajímalo na co to potřebuješ, ale to už je asi tvoje věc.

Každá swing komponenta se skládá z několika komponent a můžeš se pomocí přístupových metod ke mnohým z nich dostat.

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class Application {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);

        JPanel panel = new JPanel();
        panel.setSize(500, 500);
        panel.setLayout(null);
        panel.setBackground(Color.CYAN);
        frame.add(panel);

        JScrollPane jsp = new JScrollPane();
        jsp.setSize(100, 100);
        jsp.setLocation(panel.getWidth() / 2 - jsp.getWidth() / 2, panel.getHeight() / 2 - jsp.getHeight());
        panel.add(jsp);
        jsp.setLayout(null);            //nejdriv si nastav layout na null (pak na to ale nezapomen)
        jsp.getHorizontalScrollBar().setSize(100, 15); //potom nastav i velikost (jak nastavis rozlozeni na null, vsechno delas rucne
        jsp.getHorizontalScrollBar().setLocation(0, 0); //tahle metoda tu byt nemusela, to jen abys videl, ze si pak s tim muzes (nebo musis) delat cokoliv
    }
}
Nahoru Odpovědět
15.6.2017 23:51
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Atrament
Člen IT Redactor Gang
Avatar
Odpovídá na vojta3310
Atrament:16.6.2017 0:50

Potřebuješ vlastní ScrollPaneLayout a v něm overridnout metodu layoutContainer():

public class MyScrollPaneLayout extends ScrollPaneLayout{

@Override
public void layoutContainer(Container parent) {
    super.layoutContainer(parent);
    hsb.setOrientation(JScrollBar.HORIZONTAL);
    hsb.setLocation(0, 0); //hsb je horizontální scrollbar, tady ho umístíme nahoru, defaultně se zobrazuje pokud je potřeba
        if (hsb.isVisible()) { //pokud je hsb viditelný tak musíme posunout viewport o výšku hsb dolů
            viewport.setLocation(0, hsb.getHeight()); //viewport je ta část kde se zobrazuje to co chceme scrollovat
        } else { //jinak bude viewport úplně nahoře
            viewport.setLocation(0, 0);
        }
}

Tento vlastní layout pak nastavíš pomocí setLayout:

JScrollPane scrollPane = new JScrollPane();
scrollPane.setLayout(new MyScrollPaneLayout());
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
16.6.2017 0:50
Avatar
vojta3310
Člen
Avatar
vojta3310:16.6.2017 8:31

Ahoj, mockrát Vám děkuji, funguje to :)
Nakonec jsem použil tu variantu s vlastním layoutem, protože se mi to tam nedařilo srovnat bez layoutu.

Na co to mám klidně napíšu, ale popsat to je složitý:
zjednodušeně: ten scrollbar má vlastní UI a víc než funkci scrollbaru plní funkci grafického oddělovače, který zobrazuje aktuální pozici "výběru". V aplikaci se chi pohybovat pomocí kláves, takže má vážně jen informační funkci a nevadí když si ho někdo nevšimne nebo nepochopí k čemu patří. A dát tam pruh na oddělení a ještě dolů scrollbar si nemůžu dovolit protože to poběží na televizi, která má malý rozlišení, ani se mi to nelíbí.
Jestli chceš vědět i co je to za divnou aplikaci tak to už je spíš na TS nebo Skype, když tak napiš.

Ještě jednou děkuji a ahoj.

 
Nahoru Odpovědět
16.6.2017 8:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.