2013-04-05 3 views
1

Мне нужно создать область, на которой обычно применяется полоса прокрутки, она должна прокручиваться по горизонтали (содержимое представляет собой только представление в большую логическую область), но я должен использовать некоторые специальные элементы управления, расположенные слева и справа для управления, чтобы прокручивать.Прокручиваемая область без полос прокрутки

У меня есть использование абсолютных значений (в соответствии с логическим видом и вычитанием смещения. Таким образом, элементы управления справа на смещение будут помещены с отрицательными значениями x и, таким образом, будут отброшены. Элементы управления с значениями x выше ширины будут также отбрасывается.

ли это действительный подход?

с наилучшими пожеланиями Soeren

+0

Также рассмотрите возможность использования существующих действий прокрутки, как показано [здесь] (http://stackoverflow.com/a/7203419/230513). – trashgod

ответ

2

Вы можете можете создать JScrollPane над Component (ваш большей логической области) и удалите скроллбары.

Затем вы можете добавлять кнопки для прокрутки влево и вправо. При нажатии этих кнопок необходимо перемещать вид вашей прокрутки. Это делается путем установки абсолютного положения представления. Вы можете сделать этот родственник, сначала получив абсолютное положение вида, а затем увеличив/уменьшив его и снова установив.

Вот класс, который показывает прокручиваемое окно большего изображения.

public class ViewScroller { 

    public ViewScroller() { 
    JFrame frame = new JFrame("ViewScroller"); 
    final ImageIcon image = new ImageIcon("path\\to\\my\\image"); 
    JLabel label = new JLabel(image); 
    final JScrollPane scrollPane = new JScrollPane(label); 
    scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
    scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); 

    JButton left = new JButton("<"); 
    left.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
     Point p = scrollPane.getViewport().getViewPosition(); 
     p.x = p.x < 10 ? 0 : p.x - 10; 
     scrollPane.getViewport().setViewPosition(p); 
     } 
    }); 

    JButton right = new JButton(">"); 
    right.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
     Point p = scrollPane.getViewport().getViewPosition(); 
     int offset = p.x + scrollPane.getViewport().getWidth(); 
     p.x = offset + 10 > image.getIconWidth() ? p.x : p.x + 10; 
     scrollPane.getViewport().setViewPosition(p); 
     } 
    }); 

    frame.add(right, BorderLayout.EAST); 
    frame.add(left, BorderLayout.WEST); 
    frame.add(scrollPane, BorderLayout.CENTER); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(400, 400); 
    frame.setVisible(true); 
    } 
} 
+0

Ничего себе, спасибо вам столько «Qwerky», я попробую это - это выглядит отлично :) –

+0

@SoerenDalby только что обновлен кодом для класса, который я тестировал – Qwerky

+0

Привет, Я реализовал принцип Qwerky и работает как очарование. Однако есть одна вещь, как работает мой контроль, пользователь будет ожидать прокрутки прокрутки, когда мышь остается нажатой в элементе управления скроллером. Есть ли у вас какие-либо намеки на то, как туда добраться? –

Смежные вопросы