2016-12-04 2 views
0

Ich möchte eine horizontale Bildlaufleiste erstellen, deren Maximalwert auf 2 gesetzt ist (es sollte nur 0, 1 oder 2 als Wert gewählt werden), aber der Knopf ist unsichtbar wenn der Wert kleiner als 11 istJScrollBar: der Regler ist nicht sichtbar mit kleinen Maxwerten

scrlLineDist = new JScrollBar(); 
    scrlLineDist.setBlockIncrement(1); 
    scrlLineDist.addAdjustmentListener(new AdjustmentListener() { 
     public void adjustmentValueChanged(AdjustmentEvent e) { 
      System.out.println(scrlLineDist.getValue()); 
     } 
    }); 
    GridBagConstraints gbc_scrlLineDist = new GridBagConstraints(); 
    gbc_scrlLineDist.insets = new Insets(0, 0, 5, 0); 
    gbc_scrlLineDist.fill = GridBagConstraints.HORIZONTAL; 
    gbc_scrlLineDist.gridx = 0; 
    gbc_scrlLineDist.gridy = 3; 
    panel_4.add(scrlLineDist, gbc_scrlLineDist); 
    scrlLineDist.setMaximum(2); 
    scrlLineDist.setToolTipText(""); 
    scrlLineDist.setOrientation(JScrollBar.HORIZONTAL); 

Wenn ich den maximum Wert auf 12 zu ändern, es funktioniert so, wie ich (sichtbarer Knopf, Wert [0,2]) will. Warum passiert dies?

scrlLineDist = new JScrollBar(); 
    scrlLineDist.setBlockIncrement(1); 
    scrlLineDist.addAdjustmentListener(new AdjustmentListener() { 
     public void adjustmentValueChanged(AdjustmentEvent e) { 
      System.out.println(scrlLineDist.getValue()); 
     } 
    }); 
    GridBagConstraints gbc_scrlLineDist = new GridBagConstraints(); 
    gbc_scrlLineDist.insets = new Insets(0, 0, 5, 0); 
    gbc_scrlLineDist.fill = GridBagConstraints.HORIZONTAL; 
    gbc_scrlLineDist.gridx = 0; 
    gbc_scrlLineDist.gridy = 3; 
    panel_4.add(scrlLineDist, gbc_scrlLineDist); 
    scrlLineDist.setMaximum(12); 
    scrlLineDist.setToolTipText(""); 
    scrlLineDist.setOrientation(JScrollBar.HORIZONTAL); 

Antwort

1

Was Sie suchen, ist wahrscheinlich ein JSlider, kein JScrollbar.

// orientation, min, max, initial value 
final JSlider slider = new JSlider(SwingConstants.HORIZONTAL, 0, 2, 1); 
slider.setSnapToTicks(true); // only allow 0, 1, 2 and not in between 
slider.setPaintTicks(true); // paint ticks at tick spacing interval 
slider.setMajorTickSpacing(1); // set interval to 1 
slider.setPaintLabels(true); // show labels on ticks 

Statt eines AdjustmentListener, ein ChangeListener zu Ihrem Schieber hinzufügen, etwa so:

slider.addChangeListener(new ChangeListener() { 

    @Override 
    public void stateChanged(ChangeEvent e) { 
     // only output when value is set (when the mouse is released from the knob) 
     // remove this if statement if you would like output whenever the knob is moved 
     if(!slider.getValueIsAdjusting()) { 
      System.out.println(slider.getValue()); 
     } 
    } 

});  

Weitere Informationen über JSlider s, und eine offizielle Tutorial Besuche The Java™ Tutorials - How to Use Sliders

+0

Whoops, Sie sind richtig. Vielen Dank! –

Verwandte Themen