5

私はウィンドウでの描画全体に関してはかなり初心者であり、現時点ではちょっと立ち往生しています。現在、私は物事をテストしているところです。

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

そこで、slider1と呼ばれるJSliderを作成し、その方向と値を指定します。changeValueメソッドを呼び出すと、明らかにslider1の値が変更されます。ただし、GUIに変更はありません。誰かが私を正しい方向に向けることができますか?GUIを更新することで何かがありますか?

4

3 に答える 3

6

slider1コンストラクターで変数を初期化した後test()、次の行を追加して、jsliderティック値を設定してGUIに表示できるようにします。

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

mainメソッドで、次のステートメントを使用します。

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

スライダーの値を変更した直後の効果を確認するには、たとえば、ボタンまたはその他のコンポーネントを使用してActionListenerスライダーの値を更新し、クリックしたときにスライダーの値を更新できるように追加します。

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        changeValue( 25 ); // change 25 to desired value.
    }   
});
于 2012-03-07T03:51:25.103 に答える
3

どういうわけかchangeValueを呼び出す必要があります:

これを行うために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);
    }
}
于 2012-03-07T03:56:40.543 に答える
1

changeValue()mainメソッドでを呼び出していません。changeValue()メソッドとslider1を作成してから、main...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クラス名を大文字にするすべての単語の最初の文字を作成することをお勧めします。

于 2012-03-07T03:45:19.553 に答える