Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JScrollBar调整形状尺寸_Java_Swing_Jscrollbar - Fatal编程技术网

Java 使用JScrollBar调整形状尺寸

Java 使用JScrollBar调整形状尺寸,java,swing,jscrollbar,Java,Swing,Jscrollbar,我希望能够使用JScrollBar更改形状的位置和/或大小。我对swing组件还是相当陌生,但已经知道如何更改字符串的位置,但我不知道如何使用从paintComponent绘制的形状。我将此作为我的调整侦听器: scrollBar.addAdjustmentListener(new AdjustmentListener() { @Override public void adjustmentValueChanged(AdjustmentEvent e) {

我希望能够使用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;
}
该值会更改,但不会更改“width”变量,我哪里出错了

所以我正在测试一个JSlider,但无法让它真正改变 因为某种原因

在改变圆的宽度后,我看不到在任何地方调用方法。尝试这个工作示例作为起点,仔细阅读本教程

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();
            }
        });
    }

}
截图

使用
JSlider
,这就是它的设计目的,用户可以更好地理解它的概念。给我看一个滚动条,我想滚动一些东西,而不是大小itA
JSpinner
也是一个不错的选择。好吧,我正在测试一个JSlider,但由于某种原因无法让它实际更改宽度。我会用我所拥有的来编辑,我真的让它工作了。我错过了重新油漆,然后我的油漆组件也有一些问题。Eclipse修改了对paintComponents()的超级调用,这也极大地破坏了它。谢谢