我有一個JSlider,它指定了在JPanel上繪製的線的粗細。我添加了一個ChangeListener,所以當滑塊改變時,它也應該改變線條的粗細。但是當我這樣做時,厚度不會改變,相反,我會被淡化掉。當我沒有ChangeListener時,最初的顏色是紫色線條。我不明白髮生了什麼事。使用JSlider上的ChangeListener更改JPanel上的繪製線的粗細
這是我主要的GUI類,它包括JSlider的和的ChangeListener:
final JSlider slider = new JSlider(SwingConstants.HORIZONTAL, 0, 20, 1);
slider.setMajorTickSpacing(5);
slider.setMinorTickSpacing(1);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(final ChangeEvent theEvent) {
final int stroke = slider.getValue();
myDrawPanel.setStroke(stroke);
myDrawPanel.repaint();
}
});
而且這是在該行正在制訂其他類:
public void setStroke(final int theStroke) {
myStroke = theStroke;
}
public void paintComponent(final Graphics theGraphics) {
super.paintComponent(theGraphics);
final Graphics2D g2d = (Graphics2D) theGraphics;
// for better graphics display
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint(new Color(51, 0, 111));
g2d.setStroke(new BasicStroke(myStroke));
g2d.draw(new Line2D.Double(myX, myY, myXEnd, myYEnd));
for (Line2D l : myLines) {
g2d.draw(l);
}
}
這是結果如下:
這就是我在我的paintComponent方法中硬編碼一個線條粗細數字時原來的樣子:
當你使用'setStroke'時,你實際上是否在改變'myStroke'的值? – matt
哦,我的道歉,我忘了在我的文章中包含setStroke方法,它在我的paintComponent方法之上。我會重新編輯我的帖子。 – Jasmine
基於它應該工作的片段。考慮提供一個[可運行的示例](https://stackoverflow.com/help/mcve),它可以證明你的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這將導致更少的困惑和更好的反應 – MadProgrammer