2012-03-07 1 views
4

Я довольно новичок в отношении всего рисунка в окнах, и я сейчас застрял. На данный момент я просто проверяю это.JSlider не обновляется?

import javax.swing.*; 
import java.awt.*; 
import javax.swing.event.*; 

public class test extends JFrame 
{ 
    JSlider slider1; 

    public test() 
    { 
     slider1 = new JSlider(JSlider.VERTICAL, 0, 50, 0); 
     setLayout(new FlowLayout(FlowLayout.TRAILING)); 

     add(slider1); 
    } 

    public void changeValue() 
    { 
     slider1.setValue(25); 
    } 

    public static void main(String args[]) { 
     test gui = new test(); 
     gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     gui.setSize(550,250); 
     gui.setVisible(true); 
    } 
} 

Поэтому я создаю JSlider, который я называю slider1, я даю ему его ориентацию и значения. Когда я вызываю метод changeValue, он явно меняет значение slider1. Но никаких изменений в графическом интерфейсе нет. Может ли кто-нибудь указать мне правильное направление? Есть ли что-то с обновлением GUI?

+0

ChangeValue(), кажется, работает отлично для меня ... Вы уверены, что этот метод называется? Добавьте gui.changeValue() в конец вашего основного метода, чтобы видеть. – Steven

ответ

5

После инициализации вашей slider1 переменного в test() конструктора, добавьте эти строки так, чтобы значения JSlider клеща может быть установлены и отображается в графическом интерфейсе:

slider1.setMajorTickSpacing(5); 
slider1.setPaintLabels(true); 

Вы можете изменить клещ интервал себя, который установлен на 5. Добавления слайдер с использованием add() метод не является хорошей практикой, использовать getContentPane().add() вместо этого, так что ваш конструктор должен выглядеть следующим образом:

public test2() 
{ 
    slider1 = new JSlider(JSlider.VERTICAL, 0, 50, 0); 
    setLayout(new FlowLayout(FlowLayout.TRAILING)); 
    slider1.setMajorTickSpacing(5); 
    slider1.setPaintLabels(true); 
    this.getContentPane().add(slider1); 
} 

Я заметил, что вы не зовем changeValue() метод в методе main(). Как следует из вашего имени метода, он, похоже, является сеттером, однако вы не задаете параметрическое значение параметрически, это хорошая практика? На мой взгляд, это не так. А также changeValue() делает то же самое с setValue(), зачем создавать избыточный метод ?. Во всяком случае, вы можете использовать это:

public void changeValue (int newValue) 
{ 
    slider1.setValue(newValue); 
} 

В вашей основной метод, использовать эти операторы:

test2 gui = new test2(); 
gui.changeValue(25); 

Чтобы увидеть непосредственный эффект изменения значения ползунка, я имею в виду его обновления, используйте кнопку или некоторые другой компонент, добавьте ActionListener к нему, чтобы вы могли, например, обновить значение ползунка.

button.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     changeValue(25); // change 25 to desired value. 
    } 
}); 
+2

Большое спасибо, ваш пост был очень образованным! – swebonny

1

Вы не звоните changeValue() в свой основной метод. Сделать метод ChangeValue() и Slider1 static, а затем вызвать changeValue() в основной ...

static JSlider slider1; 

public Test() { 
    slider1 = new JSlider(JSlider.VERTICAL, 0, 50, 0); 
    setLayout(new FlowLayout(FlowLayout.TRAILING)); 

    add(slider1); 
} 

public static void changeValue() { 
    slider1.setValue(35); 
} 

public static void main(String args[]) { 
    Test gui = new Test(); 
    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    gui.setSize(550,250); 
    gui.setVisible(true); 

    changeValue(); 
} 

И это лучшая практика, чтобы сделать первую букву каждого слова прописными буквами имен Java-класса.

+0

, как вы думаете, пользователь спрашивает об этом? вы открыли IDE, скопировали, вставляете код и видите результаты? Я думаю нет. Прежде всего, он должен изменить конструктор, чтобы jslider мог быть виден. ваше исправление правильное, он должен определенно определить метод изменения, однако, не делая его видимым, вы не можете понять, обновляется оно или нет. снова проверьте заголовок вопроса. – Juvanis

+0

@deporter: Я запускал код в среде IDE, но не видел вопроса с вашей точки зрения, что, возможно, верно с точки зрения пользователя. – neo108

+0

Спасибо за сообщение! – swebonny

3

Вам нужно позвонить ChangeValue как-то:

Я просто добавил JButton с ActionListener, чтобы сделать это, и сумел заставить его работать на меня со следующим кодом:

package testswing; 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class JSliderTest extends JFrame 
{ 
    JSlider slider1; 
    JButton button1; 

    public JSliderTest() 
    { 
     setLayout(new FlowLayout()); 

     slider1 = new JSlider(JSlider.VERTICAL, 0, 50, 0); 
     add(slider1); 

     button1 = new JButton("Centre JSlider!"); 
     button1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       changeValue(); 
      } 
     }); 
     add(button1); 
    } 

    public void changeValue() 
    { 
     slider1.setValue(25); 
    } 

    public static void main(String args[]) { 
     JSliderTest gui = new JSliderTest(); 
     gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     gui.setSize(550,250); 
     gui.setVisible(true); 
    } 
} 
+0

Спасибо большое! – swebonny

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

  • Нет связанных вопросов^_^