gpt4 book ai didi

Java Applet JSlider 宽度

转载 作者:行者123 更新时间:2023-12-01 19:04:08 26 4
gpt4 key购买 nike

我正在尝试在 JSlider 下绘制等宽的彩色矩形,以便刻度线分隔颜色。我真的很接近,但无法让它变得非常完美。我已经打印了一堆值,我的问题是 slider 的宽度不是滑动条的实际长度。 slider 的 x 位置也不是条形图的起始位置。这是我根据 slider 位置设置彩色矩形边界的代码。

for(int i = 0; i < Global.emSpectrum.length; i++)  //emSpectrum.length is the number of colored rectangles
{
emSpectrum.get(i).setColorRect(Global.emSpectrum[i], 13 + i * (int)((this.slider.getWidth())/Global.emSpectrum.length), //13 lines up the first color under the bar
this.slider.getY() + this.slider.getHeight()/2, (int)((this.slider.getWidth())/Global.emSpectrum.length),
(int)(Global.rectHeight * getHeight()));
}

有没有更好的方法来解决这个问题?

谢谢!

最佳答案

是的,一个不错的解决方案是使用字典,例如 HashTable<Integer, JLabel>并用 JLabels 填充它,该 JLabels 保存颜色矩形的 ImageIcons,使用与 JSlider 上适当位置相对应的 Integer。例如我的SSCCE:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Dictionary;
import java.util.Hashtable;

import javax.swing.*;

public class SliderEg extends JPanel {
public static final Color[] COLORS = { Color.red, Color.orange,
Color.yellow, Color.green, Color.blue, Color.cyan};
private static final int BI_W = 30;
private static final int BI_H = 10;
private JSlider slider = new JSlider(0, 100, 0);

public SliderEg() {
int majorSpacing = slider.getMaximum() / (COLORS.length - 1);
Dictionary<Integer, JLabel> dictionary = new Hashtable<Integer, JLabel>();
slider.setMajorTickSpacing(majorSpacing);
slider.setPaintLabels(true);
slider.setPaintTicks(true);
slider.setSnapToTicks(true);
for (int i = 0; i < COLORS.length; i++) {
ImageIcon icon = createColorIcon(COLORS[i]);
JLabel label = new JLabel(icon);
int key = i * majorSpacing;
dictionary.put(key, label);
}
slider.setLabelTable(dictionary);

setLayout(new BorderLayout());
add(slider, BorderLayout.CENTER);
}

private ImageIcon createColorIcon(Color color) {
BufferedImage img = new BufferedImage(BI_W, BI_H,
BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();
g.setColor(color);
g.fillRect(0, 0, BI_W, BI_H);
g.dispose();

return new ImageIcon(img);
}

private static void createAndShowGui() {
SliderEg mainPanel = new SliderEg();

JFrame frame = new JFrame("SliderEg");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

关于Java Applet JSlider 宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10867168/

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