Avatar billede spunkman Nybegynder
26. marts 2004 - 09:28 Der er 7 kommentarer

JScrollBar knob/thump styring

Er der nogen der ved hvordan man kan styre en scrollbars knob ?
man kan sætte setUnitIncrement og setBlockIncrement på scrollbaren. Unit styrer knappen og Block styrer det frie område i baren (track). Men hvordan f.... kan man styre knob'en hvis man feks vil have den til at scroll en linie ad gangen.
scrollBar'en har en BoundedRangeModel som man kan sætte en changelistener på, så kan man jo lave en scrollRecttovisible.
Men det er ikke så pænt

nogle idéer ?
Avatar billede _carsten Nybegynder
26. marts 2004 - 10:02 #1
Jeg er ikke helt sikker på at jeg forstår spørgsmålet, umiddelbart vil jeg nemlig mene du selv har givet svaret, fordi hvis du bruger setBlockIncrement, scrolles
det du sætter via setBlockIncrement.

Altså

JScrollBar bar = mitJScrollPane.getVerticalScrollBar();
bar.setBlockIncrement(10);

scroller 10 pixel ad gangen
Avatar billede spunkman Nybegynder
26. marts 2004 - 10:56 #2
setBlockIncrement styrer området uden om knob'en (jeg ved ikke hvad den hedder på dansk)
men når man dragger knob'en er den ligeglad, og scroller den ca.1 pixel ad gangen.
Avatar billede _carsten Nybegynder
26. marts 2004 - 12:11 #3
Hmmm - vender tilbage i aften hvis jeg bliver klogere
Avatar billede spunkman Nybegynder
26. marts 2004 - 14:23 #4
løsningen kan laves ved at sætte en ny BoundedRangeModel på scrollbarren
evt ved at extende DefaultBoundedRangeModel og lave følgende
public void setRangeProperties(int newValue, int newExtent, int newMin, int newMax, boolean adjusting) {
    newValue = (newValue / 10) * 10;
    super.setRangeProperties(newValue, newExtent, newMin, newMax, adjusting);
}
Avatar billede _carsten Nybegynder
26. marts 2004 - 23:08 #5
Har lige siddet og leget lidt med det, er det noget a la det her du vil have
frem, hvor der pr. scroll (altså klikkes med mus ved siden af knop) scrolles
ca. et view pr. scroll, for så har JScrollBar jo muligheden via sin konstruktør.

import javax.swing.*;

public class JFrame_2 extends javax.swing.JFrame {
   
    public JFrame_2() {
        initComponents();
    }
   

    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        data = new Object[1000][4];
        for(int i = 0; i < 1000; i++){
            data[i][0] = new Integer(i);
        }
           
        jTable1.setModel(new javax.swing.table.DefaultTableModel(data,
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }));

        jScrollPane1.setViewportView(jTable1);

        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);

        JScrollBar bar =  new JScrollBar(java.awt.Adjustable.VERTICAL,
                                                    0,  //  Value
                                                    350,  //  Extent
                                                    0,  //  Min
                                                    2000); //  Max.
        jScrollPane1.setVerticalScrollBar(bar);

        pack();
    }
   
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    public static void main(String args[]) {
        new JFrame_2().show();
    }

    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    private Object[][] data;
}
Avatar billede _carsten Nybegynder
26. marts 2004 - 23:13 #6
Så lige det var én linie du ville have, så // Extent skal bare sættes til liniehøjden
Avatar billede _carsten Nybegynder
28. marts 2004 - 11:53 #7
Det er altså i orden med mig, hvis du selv æder point her, du har trods alt selv frembragt en løsning som er brugbar for dig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester