在Java中制作可播放的jslider
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Java中制作可播放的jslider,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5964字,纯文字阅读大概需要9分钟。
内容图文
![在Java中制作可播放的jslider](/upload/InfoBanner/zyjiaocheng/691/deb270bc0a384c48891b43cbccfa031f.jpg)
我正在使用通过从用户获取数学表达式的eclipse和windowbuilder制作绘图仪(例如ADD(MUL(X,Y),Z)),并在某一时刻要求用户将其变量之一指定为time.
然后将要求用户选择该变量的起点和范围.然后程序将显示一个具有jslider和播放按钮的框架(和面板).当用户单击该按钮时,程序应开始绘制表达式.
它看起来应该像Gapminder chart.
我检查了有关更新jslider的其他问题,但它们通常是关于音乐播放器滑块或随时间变化的滑块(没有图形部分).
我的问题特别是关于滑块的更新(间隔可以为1)
但如果您还可以指导我如何制作可播放的滑块,使其也可用于绘图部分,那就太好了.
到目前为止的代码:
package progGUI;
import java.awt.BorderLayout;
public class CanvasFrame extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CanvasFrame frame = new CanvasFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public CanvasFrame() {
setTitle("Graph");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 700, 542);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
JSlider slider = new JSlider();
slider.setPaintLabels(true);
slider.setMinorTickSpacing(1);
slider.setMajorTickSpacing(5);
slider.setPaintTicks(true);
JLabel lblEnteredExpression = new JLabel("Entered Expression");
JLabel lblVaraibles = new JLabel("Variables");
JFormattedTextField formattedTextField = new JFormattedTextField();
JFormattedTextField formattedTextField_1 = new JFormattedTextField();
JPanel panel = new JPanel();
panel.setBackground(Color.WHITE);
JButton btnNewButton = new JButton("Play");
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addContainerGap()
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(panel, GroupLayout.PREFERRED_SIZE, 453, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED, 51, Short.MAX_VALUE)
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addComponent(lblEnteredExpression, Alignment.TRAILING)
.addComponent(lblVaraibles)
.addComponent(formattedTextField, GroupLayout.PREFERRED_SIZE, 119, GroupLayout.PREFERRED_SIZE)
.addComponent(formattedTextField_1, GroupLayout.PREFERRED_SIZE, 123, GroupLayout.PREFERRED_SIZE))
.addGap(57))
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 87, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(slider, GroupLayout.PREFERRED_SIZE, 454, GroupLayout.PREFERRED_SIZE)
.addContainerGap())))
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.TRAILING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(18)
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(lblEnteredExpression)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(formattedTextField_1, GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(lblVaraibles)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(formattedTextField, GroupLayout.PREFERRED_SIZE, 20, GroupLayout.PREFERRED_SIZE))
.addComponent(panel, GroupLayout.PREFERRED_SIZE, 350, GroupLayout.PREFERRED_SIZE))
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(31)
.addComponent(btnNewButton))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(18)
.addComponent(slider, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)))
.addGap(402))
);
contentPane.setLayout(gl_contentPane);
}
}
解决方法:
用户使用javax.swing.Timer安排定期回调,该回调将更新JSlider的值.使用附加到JSlider的ChangeListener来驱动图形,例如…
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
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 Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private Timer timer;
private JSlider slider;
private JButton button;
private JTextField field;
public TestPane() {
slider = new JSlider();
field = new JTextField(4);
button = new JButton(">");
add(slider);
add(button);
add(field);
slider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
field.setText(Integer.toString(slider.getValue()));
}
});
slider.setValue(0);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (timer.isRunning()) {
stopTheClock();
} else {
startTheClock();
}
}
});
timer = new Timer(500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int value = slider.getValue() + 1;
if (value >= slider.getMaximum()) {
stopTheClock();
} else {
slider.setValue(value);
}
}
});
}
protected void startTheClock() {
slider.setValue(0);
timer.start();
button.setText("[]");
}
protected void stopTheClock() {
timer.stop();
button.setText(">");
}
}
}
有关更多详细信息,请参见How to use Swing Timers和How to Use Sliders
内容总结
以上是互联网集市为您收集整理的在Java中制作可播放的jslider全部内容,希望文章能够帮你解决在Java中制作可播放的jslider所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。