stateChanged
基本的に、イベントが発生してからtextField
更新されるまでの間に「強制遅延」を挿入することができます。
これは基本的に、stateChanged
メソッドが最後に呼び出されてからtextField
.
イベント ディスパッチ スレッドをブロックしたくないため、新しいイベントの処理が停止されるため、javax.swing.Timer
.
基本的に、メソッドが呼び出されるたびにstateChanged
、タイマーを再起動します。イベントが停止すると、タイマーが完了し、イベントがトリガーされます。これにより、 ...簡単actionPerformed
に更新できます;)textField
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class TestSlider01 {
public static void main(String[] args) {
new TestSlider01();
}
public TestSlider01() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private JSlider slider;
private JTextField textField;
private Timer slideTimer;
public TestPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
textField = new JTextField(20);
slider = new JSlider(JSlider.HORIZONTAL, 0, 30, 2);
slider.setFont(new Font("Dialog", Font.BOLD, 10));
slider.setMinorTickSpacing(1);
slider.setMajorTickSpacing(2);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
slider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
// textField.setText(String.valueOf(slider.getValue()));
slideTimer.restart();
}
});
slideTimer = new Timer(500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textField.setText(String.valueOf(slider.getValue()));
}
});
slideTimer.setRepeats(false);
add(slider, gbc);
add(textField, gbc);
}
}
}
さて、私は故意に遅延に大きな値を使用しました。あなたはそれで遊んでみたいと思うかもしれません...
また、setBounds
非常に悪い考えです。レイアウト マネージャー API の学習に時間を投資します。長い目で見れば、心痛を大幅に軽減できます ;)