1 Востаннє редагувалося generation (31.12.2015 10:15:21)

Тема: Клікабельний JSlider

Вітаю Вас з наступаючим Новим Роком.
Мені потрібно реалізувати клікабельний JSlider, а саме, коли юзер натисне на слейдер, то він повинен самостійно переміститися у відповідне місце. Це мені потрібне для мого плеера під Ubuntu, щоб можно було спостерігати за програванням пісні та, відповідно, програвати потрібне місце за допомогою слайдера. Якщо Ви знаєте інший спосіб реалізації, то підскажіть як саме це зробити. Інший основний функціонал плееру вже реалізований, потрібна зі слайдером допомога(настогидло слухати музику без можливості перемутування пісні).

P.S. Чому я пишу плеер під Ubuntu та ще на Java SE? Тому що, інтернет зі швідкістю 2-3 кб / сек. не дозволяє завантажити плеер, та ще в мене биті пакети(які я також не можу оновити із-за повільного та нестабільного інтернету).

2

Re: Клікабельний JSlider

це точно Java? не JavaScript?

Говоріть українською! Живіть українською! Відчувайте українською!

3

Re: Клікабельний JSlider

FakiNyan написав:

це точно Java? не JavaScript?

Java)

4

Re: Клікабельний JSlider

ну, я з тим не працював, але маю певні загальні знання.
У вас є можливість детектити, коли на той слайдер хтось тисне мишкою?

Говоріть українською! Живіть українською! Відчувайте українською!

5

Re: Клікабельний JSlider

поки відповідаєте, перекладу вам відповідь на схоже питання..

Погляньте на

BasicSliderUI

, метод, котрий вам треба переписати -

scrollDueToClickInTrack(int)

Якщо тре встановили значення JSlider до найближчого значення, де юзер клікнув, вам треба дещо випендритись з переведенням координат щура, котрі отримуються за допомогою getMousePosition(), беріть в розрахунок позицію

Component

.

BasicSliderUI

дає дві функції, котрі можна використати,

valueForXPosition(int xPos) та valueForYPosition(int yPos)

і тут код йде

JSlider slider = new JSlider(JSlider.HORIZONTAL);
slider.setUI(new MetalSliderUI() {
    protected void scrollDueToClickInTrack(int direction) {
        // this is the default behaviour, let's comment that out
        //scrollByBlock(direction);

        int value = slider.getValue(); 

        if (slider.getOrientation() == JSlider.HORIZONTAL) {
            value = this.valueForXPosition(slider.getMousePosition().x);
        } else if (slider.getOrientation() == JSlider.VERTICAL) {
            value = this.valueForYPosition(slider.getMousePosition().y);
        }
        slider.setValue(value);
    }
});
Говоріть українською! Живіть українською! Відчувайте українською!
Подякували: generation1

6

Re: Клікабельний JSlider

FakiNyan написав:

поки відповідаєте, перекладу вам відповідь на схоже питання..

Погляньте на

BasicSliderUI

, метод, котрий вам треба переписати -

scrollDueToClickInTrack(int)

Якщо тре встановили значення JSlider до найближчого значення, де юзер клікнув, вам треба дещо випендритись з переведенням координат щура, котрі отримуються за допомогою getMousePosition(), беріть в розрахунок позицію

Component

.

BasicSliderUI

дає дві функції, котрі можна використати,

valueForXPosition(int xPos) та valueForYPosition(int yPos)

і тут код йде

JSlider slider = new JSlider(JSlider.HORIZONTAL);
slider.setUI(new MetalSliderUI() {
    protected void scrollDueToClickInTrack(int direction) {
        // this is the default behaviour, let's comment that out
        //scrollByBlock(direction);

        int value = slider.getValue(); 

        if (slider.getOrientation() == JSlider.HORIZONTAL) {
            value = this.valueForXPosition(slider.getMousePosition().x);
        } else if (slider.getOrientation() == JSlider.VERTICAL) {
            value = this.valueForYPosition(slider.getMousePosition().y);
        }
        slider.setValue(value);
    }
});

Дуже дякую за розкриту відповідь)