gpt4 book ai didi

java - 将 slider 组件的多个实例添加到 Jpanel

转载 作者:行者123 更新时间:2023-12-02 04:28:39 26 4
gpt4 key购买 nike

正在开发具有多个 slider 的混合器应用程序。我想为我确定的多个 channel 并排创建同一 slider 的多个实例 (1-16)。这非常重要,所以我只想从左到右创建新的并排 VolumeControl 实例。现在我只是让它们都可以通过相同的输入、监听器等工作。我只是努力让它们显示出来。以下是我创建 JSlider 的单个实例的方法(大部分取自演示)。注意:我来自 Android 开发,所以我可能会走完全错误、复杂的道路!

public class VolumeControl extends JPanel implements ChangeListener {

...

public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(VolumeControl::createAndShowGUI);
}

public VolumeControl () {

super(new BorderLayout());

...

JSlider volumeControl = new JSlider(JSlider.VERTICAL,
VOLUME_MIN, VOLUME_MAX, currentVolume);

volumeControl.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10));
add(volumeControl, BorderLayout.LINE_START);
setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
}

private static void createAndShowGUI() {

JFrame frame = new JFrame("Volume Control");
VolumeControl animator = new VolumeControl();
frame.add(animator, BorderLayout.CENTER);

frame.pack();
frame.setVisible(true);
}

}

最佳答案

只需创建一个或多个工厂方法,您就可以使用它们按照您想要的方式创建和配置 slider ...

Sliders

import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

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 VolmeControlPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public static class VolmeControlPane extends JPanel {

protected static final int VOLUME_MIN = 0;
protected static final int VOLUME_MAX = 100;
protected static final String SLIDER_CONTROL_KEY = "Slider.controlKey";

public VolmeControlPane() {
setLayout(new GridBagLayout());
JSlider[] sliders = makeSliders(16);
for (JSlider slider : sliders) {
add(slider);
}
}

public JSlider[] makeSliders(int count) {

JSlider[] sliders = new JSlider[count];
for (int index = 0; index < count; index++) {
sliders[index] = makeSlider(VOLUME_MIN, VOLUME_MAX, VOLUME_MIN + (VOLUME_MAX / 2));
sliders[index].putClientProperty(SLIDER_CONTROL_KEY, index);
}

return sliders;

}

public JSlider makeSlider(int min, int max, int value) {
JSlider volumeControl = new JSlider(JSlider.VERTICAL,
min, max, value);

volumeControl.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10));

return volumeControl;
}

}

}

我添加的一个小技巧是使用 putClientProperty 提供一个用于识别 slider 的键,您也可以使用 setName。这里的想法是,当您附加监听器时,您可以插入键的 slider 并识别它代表哪个 channel ,作为一个想法

关于java - 将 slider 组件的多个实例添加到 Jpanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31823911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com