2012-03-07 55 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); 
    } 
} 

私は、スライダ1と呼ばれるJSliderを作成し、その向きと値を与えます。 changeValueメソッドを呼び出すと、明らかにslider1の値が変更されます。しかしGUIに変更はありません。 誰かが私を正しい方向に向けることができますか? GUIをリフレッシュして何かがありますか?

+0

changeValue ()は私のためにうまくいくようです...このメソッドが呼ばれていると確信していますか? 表示するメインメソッドの最後にgui.changeValue()を追加します。 – Steven

答えて

5

、JSliderの目盛りの値はGUIで設定され、目に見えることができるようにこれらの行を追加します:あなたが追加5に設定されている自分自身間隔の目盛りを変更することができます

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

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); 
} 

私はあなたが0123を呼び出していないことに気づきましたmain()方法における方法。あなたのメソッド名が意味するように、それは設定者のようですが、パラメトリックに設定値を与えないのですが、これは良い方法ですか?私の意見では、そうではありません。また、changeValue()は同じことをsetValue()としていますが、なぜ冗長メソッドを作成するのですか?とにかく、あなたはこれを使用することができます。

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

をあなたのmainメソッドでは、これらの文を使用します。

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

が、私はそれを更新する意味スライダーの値を変更するの即時効果を確認ボタンまたは一部を使用するには他のコンポーネントの場合は、ActionListenerを追加して、クリック時にスライダの値を更新できるようにします。あなたは何とかchangeValueを呼び出す必要が

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クラス名を大文字にすることをお勧めします。 test()コンストラクタであなたのslider1変数を初期化した後

+0

あなたはこれを尋ねていると思いますか? IDEを開いてコピーし、コードを貼り付けて結果を確認しましたか?私は違うと思います。まず、jsliderを表示できるようにコンストラクタを変更する必要があります。あなたの修正は正しいです、彼は確実に変更メソッドを呼び出す必要がありますが、それが更新されているかどうかを理解することはできません。もう一度質問のタイトルを確認してください。 – Juvanis

+0

@deporter:私はIDEでコードを実行しましたが、あなたの視点から質問が表示されませんでした。おそらくユーザの観点からは正しいでしょう。 – neo108

+0

あなたの投稿をありがとう! – swebonny

3

を私はこれを行うにはのActionListenerでのJButtonを追加し、それが次のコードで私のために動作させるために管理:

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

関連する問題