gpt4 book ai didi

java - 使用 JScrollBar 调整形状尺寸

转载 作者:行者123 更新时间:2023-12-01 13:50:02 27 4
gpt4 key购买 nike

我希望能够使用 JScrollBar 更改形状的位置和/或大小。我对 Swing 组件还很陌生,但已经弄清楚如何更改字符串的位置,但我不知道如何使用从 PaintComponent 绘制的形状来实现它。我将此作为我的调整监听器:

scrollBar.addAdjustmentListener(new AdjustmentListener() {

@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
double value = scrollBar.getValue(); //returns current value of scrollbar 0-100
double maximumValue = scrollBar.getMaximum();
double newX = (value * messagePanel.getWidth() / maximumValue);
messagePanel.setXCoordinate((int)newX);



}//end adjustment Value Changed

});//end adjustment listener

消息的 x 和 y 坐标默认为 20,但我不确定如何调整椭圆或矩形(均为 2D)。我不知道是否还有其他算法或如何进行。如果需要,我可以提供更多代码。请帮忙!

JSlider测试代码:

public class event implements ChangeListener{

public void stateChanged(ChangeEvent e) {
int value = slider.getValue();
label.setText("Current Value " + value);
circle.setWidth(value);

}//end stateChanged
}//end class event

我在这里绘制了形状:

    private Shape circle; 
int width = 300;

public DrawShape() {
this.circle = new Ellipse2D.Float(100, 20, width, 300);
}

public void setWidth(int width) {
this.width = width;
}

值发生了变化,但它没有改变“宽度”变量,我哪里出错了?

最佳答案

So i'm testing out a JSlider but can't get it to actually change the width for some reason.

我没有看到你打电话repaint()更改圆的宽度后的任何位置的方法。尝试将此工作示例作为起点,并仔细阅读 Performing Custom Painting教程。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Demo {

private Shape circle;
private int width = 100;
private int height = 100;

private void initGUI(){

final JPanel drawPane = new JPanel(){
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
circle = new Ellipse2D.Float(100, 20, width, height);
Graphics2D graphics = (Graphics2D)g.create();
graphics.draw(circle);
}

@Override
public Dimension getPreferredSize() {
return new Dimension(400,300);
}
};

JSlider widthSlider = new JSlider(width, width * 2, width);
widthSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
JSlider slider = (JSlider)e.getSource();
width = slider.getValue();
drawPane.repaint();
}
});

JSlider heightSlider = new JSlider(height, height * 2, height);
heightSlider.setOrientation(JSlider.VERTICAL);
heightSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
JSlider slider = (JSlider)e.getSource();
height = slider.getValue();
drawPane.repaint();
}
});

JPanel content = new JPanel(new BorderLayout());
content.add(widthSlider, BorderLayout.NORTH);
content.add(drawPane, BorderLayout.CENTER);
content.add(heightSlider, BorderLayout.WEST);

JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setContentPane(content);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Demo().initGUI();
}
});
}

}

屏幕截图

enter image description here

关于java - 使用 JScrollBar 调整形状尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20037558/

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