/ / Jak ukryć przyciski strzałek w JScrollBar - java, swing, awt, jscrollpane

Jak ukryć przyciski strzałek w JScrollBar - java, swing, awt, jscrollpane

Muszę ukryć przyciski strzałek java.awt.Scrollbar(VERTICAL) w aplikacji AWT. Czy ktoś wie, jak można to osiągnąć?

Widziałem przykład tutaj, ale kod po prostu ukrywa przyciski. Puste miejsce na guziki nadal pozostaje; nie jest zajęte przez pasek przewijania.

A dokładniej, oto zrzut ekranu z tego, co powinienem osiągnąć. Nie jestem pewien, w jakim kierunku się do tego zabrać.

Aktualizacja: Szukałem rozwiązania w AWT. Ale teraz jestem otwarty na sugestie w Swingu.

pożądany efekt

Odpowiedzi:

8 dla odpowiedzi № 1

Spróbuj tego ... zastępuje zwykłe przyciski pionowego paska przewijania za pomocą przycisków o rozmiarze 0x0.

Ogranicza to twój wygląd i styl :(

JScrollPane scroller = new JScrollPane(mainPane);
scroller.setPreferredSize(new Dimension(200,200));
// ... etc
scroller.getVerticalScrollBar().setUI(new BasicScrollBarUI()
{
@Override
protected JButton createDecreaseButton(int orientation) {
return createZeroButton();
}

@Override
protected JButton createIncreaseButton(int orientation) {
return createZeroButton();
}

private JButton createZeroButton() {
JButton jbutton = new JButton();
jbutton.setPreferredSize(new Dimension(0, 0));
jbutton.setMinimumSize(new Dimension(0, 0));
jbutton.setMaximumSize(new Dimension(0, 0));
return jbutton;
}
});

Aktualizacja: przepraszam, to jest rozwiązanie swingowe


3 dla odpowiedzi № 2

Za pomocą Nimbus Look and Feel możesz użyć tego, aby usunąć przyciski strzałek:

    UIManager.getLookAndFeelDefaults().put(
"ScrollBar:"ScrollBar.button".size", 0);
UIManager.getLookAndFeelDefaults().put(
"ScrollBar.decrementButtonGap", 0);
UIManager.getLookAndFeelDefaults().put(
"ScrollBar.incrementButtonGap", 0);

Oto pełny przykład:

wprowadź opis obrazu tutaj

public class ScrollDemo extends JFrame {

public ScrollDemo() {

String[] columnNames = {"Column"};
Object[][] data = {
{"A"},{"B"},{"C"},{"D"},{"E"},{"F"},
{"A"},{"B"},{"C"},{"D"},{"E"},{"F"},
{"A"},{"B"},{"C"},{"D"},{"E"},{"F"},
{"A"},{"B"},{"C"},{"D"},{"E"},{"F"},
{"A"},{"B"},{"C"},{"D"},{"E"},{"F"},
};

add(new JScrollPane(new JTable(data, columnNames)));
pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {

try {
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Exception e) {
// No Nimbus
}
UIManager.getLookAndFeelDefaults().put(
"ScrollBar:ScrollBarThumb[Enabled].backgroundPainter",
new FillPainter(new Color(127, 169, 191)));
UIManager.getLookAndFeelDefaults().put(
"ScrollBar:ScrollBarThumb[MouseOver].backgroundPainter",
new FillPainter(new Color(127, 169, 191)));
UIManager.getLookAndFeelDefaults().put(
"ScrollBar:ScrollBarTrack[Enabled].backgroundPainter",
new FillPainter(new Color(190, 212, 223)));

UIManager.getLookAndFeelDefaults().put(
"ScrollBar:"ScrollBar.button".size", 0);
UIManager.getLookAndFeelDefaults().put(
"ScrollBar.decrementButtonGap", 0);
UIManager.getLookAndFeelDefaults().put(
"ScrollBar.incrementButtonGap", 0);

new ScrollDemo();
}
});
}

}

Kod dla Painter używany:

public class FillPainter implements Painter<JComponent> {

private final Color color;

public FillPainter(Color c) { color = c; }

@Override
public void paint(Graphics2D g, JComponent object, int width, int height) {
g.setColor(color);
g.fillRect(0, 0, width-1, height-1);
}

}