java - 如何根据指定的 JTextField 移动多个 JSlider

标签 java jslider

我需要根据 JSwing 中相应的文本字段移动 slider 及其值。我必须相应地移动第一个 JSlider,但是当在第二个 JSlider 中输入值时,调用 First 也与第二个 JSlider 一起移动。只是想在指定的文本字段输入值时移动相应的 slider

这是给您的代码:

package sliderexample;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel; 
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;


public class BlueSliderBeanFrame extends JFrame implements DocumentListener       {

/**
 * 
 */
private static final long serialVersionUID = 1L;
/**
 * 
 */
private JPanel contentPane;
private JTextField textField;


JSlider slider = new JSlider();
private JTextField textField_1;
JSlider slider_2 = new JSlider();


/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                BlueSliderBeanFrame frame = new BlueSliderBeanFrame();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public BlueSliderBeanFrame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    textField = new JTextField();
    textField.getDocument().putProperty("owner", textField);
    textField.getDocument().addDocumentListener(this);
    textField.setBounds(53, 37, 125, 50);
    contentPane.add(textField);
    textField.setColumns(10);

    textField_1 = new JTextField();
    textField_1.getDocument().putProperty("owner", textField_1);
    textField_1.getDocument().addDocumentListener(this);
    textField_1.setColumns(10);
    textField_1.setBounds(53, 126, 125, 50);
    contentPane.add(textField_1);


    slider.setValue(0);
    slider.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent arg0) {
                textField.setText(String.valueOf(slider.getValue()));
                }
        });
    slider.setMaximum(999);
    slider.setBounds(188, 37, 200, 50);
    contentPane.add(slider);

    slider_2.addChangeListener(new ChangeListener() {
    public void stateChanged(ChangeEvent e) {
        textField.setText(String.valueOf(slider_2.getValue()));
        }
    });
    slider_2.setValue(0);
    slider_2.setMaximum(999);
    slider_2.setBounds(188, 126, 200, 50);
    contentPane.add(slider_2);




}



public void updateSlider( int i ) {

    Runnable doHighlight = new Runnable() {

    @Override
    public void run() {
     // your highlight code
     int val = 0;
     System.out.println(" i val : "+i);
     if( i == 1 ){
            val = Integer.parseInt(textField.getText());
            System.out.println("owner1 slider");
            slider.setValue(val);
     } else if ( i == 2 ){
            val = Integer.parseInt(textField_1.getText());
            System.out.println("owner2 slider");
            slider_2.setValue(val);
     }
 }};   

    SwingUtilities.invokeLater(doHighlight);

}

@Override
public void changedUpdate(DocumentEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void insertUpdate(DocumentEvent arg0) {
    // TODO Auto-generated method stub
    /*Object owner = arg0.getDocument().getProperty("owner");
    if( owner == textField ){
            System.out.println("owner1");
            updateSlider(1);
    } else if ( owner == textField_1 ){
        System.out.println("owner2");
            updateSlider(2);
    }*/
       if (arg0.getDocument()== textField.getDocument()){
            System.out.println("event caused by field");
            updateSlider(1);
        }
        else if (arg0.getDocument()== textField_1.getDocument()){
            System.out.println("event caused by field2");
            updateSlider(2);
        }
}

@Override
public void removeUpdate(DocumentEvent arg0) {
    // TODO Auto-generated method stub

}
}

输出:

enter image description here

请任何人帮助我解决这个问题

最佳答案

只需要稍微更新一下你的代码,

更新的代码:

 slider_2.addChangeListener(new ChangeListener() {
    public void stateChanged(ChangeEvent e) {
         /* 
         here you did wrong...
         textField.setText(String.valueOf(slider_2.getValue()));
         */
        textField_1.setText(String.valueOf(slider_2.getValue()));
        }
    });

查看输出:

enter image description here

关于java - 如何根据指定的 JTextField 移动多个 JSlider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36034320/

相关文章:

java - 通过命令提示符在java中制作 list 文件

java - 如何在socket编程中制作多条消息?

java - 最简单的 Gui 测试 Java 重绘

java - 使用 JSlider 创建日期选择器?

java - 更改 JSlider 的可显示标签?

java - 如何在 JSlider 获得焦点时删除虚线?

java - 泛型。创建 2 个对象并将它们添加到另一个对象

java - 我们是否需要在Spring云合约中 stub 其他微服务

java - JSlider 和 JTextField 数组更改监听器 - 从内部类引用的局部变量必须是最终的或有效的最终

java - 将 JSlider 添加到具有 GridLayout 的 JFrame (Java)