Ошибки с setFrame, JSlider
Поэтому я тестирую JSlider для более крупного проекта и не могу заставить его работать. Ползунок должен регулировать размер круга, и он не работает. Я подумал, что у меня могут быть проблемы с созданием круга, и я пытаюсь использовать setFrame, и он выдает ошибку, говоря, что это "неопределено". Кто-нибудь может понять почему? Так как он должен принимать либо float, либо double как параметры. Или, если вы понимаете, почему он не регулирует размер фигуры, это тоже очень поможет... Вот что у меня есть:
public class DrawShape extends JPanel{
private float width = 300;
private Shape circle = new Ellipse2D.Float(100, 20, width, 300);
public DrawShape() {
}
public DrawShape(float width) {
this.width = width;
}
public void setWidth(int w) {
this.width = w;
circle.setFrame(100, 20, width, 300);//This is where the error is
}
public void paintComponent (Graphics g) {
super.paintComponents(g);
Graphics2D graphics = (Graphics2D)g;
graphics.setColor(Color.black);
graphics.fill(circle);
}//end paintComponent
}//end class
Класс с основным:
public class SliderTest extends JFrame{
private static DrawShape circle = new DrawShape();
JSlider slider;
JLabel label;
public SliderTest() {
setLayout(new FlowLayout());
slider = new JSlider(JSlider.HORIZONTAL, 150, 450, 300);//orientation, min val, max value, starting val
slider.setMajorTickSpacing(50);//every 5 integers will be a new tick position
slider.setPaintTicks(true);
add(slider);
label = new JLabel("Current value 300");
add(label);
event e = new event();
slider.addChangeListener(e);;
}//end cons
public class event implements ChangeListener{
public void stateChanged(ChangeEvent e) {
JSlider slider = (JSlider)e.getSource();
int value = slider.getValue();
label.setText("Current Value " + value);
circle.setWidth(value);
repaint();
}//end stateChanged
}//end class event
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("Circle");
frame.add(circle);
frame.setSize(500,400);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JFrame frame1 = new SliderTest ();
frame1.setTitle("Toolbar");
frame1.setSize(300,200);
frame1.setLocation(200,100);
frame1.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame1.setVisible(true);
}
}
1 ответ
Shape
не имеет setFrame
метод. RectangularShape
делает...
Вместо
private Shape circle = new Ellipse2D.Float(100, 20, width, 300);
Вы можете попробовать использовать...
private Ellipse2D circle = new Ellipse2D.Float(100, 20, width, 300);
вместо...
Ваш public DrawShape(float width) {
Конструктор также не прав, так как он на самом деле ничего не делает.
Вы также должны рассмотреть возможность переопределения getPreferredSize
метод, чтобы он мог вернуть ширину формы как часть предпочтительного размера.
Я не уверен, что вам действительно нужно поддерживать width
ссылка, как вы можете убедиться в этом из circle
непосредственно... ИМХО
Например
Я не проверял это...
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import javax.swing.JPanel;
public class DrawShape extends JPanel {
private final Ellipse2D circle = new Ellipse2D.Float(100, 20, 300, 300);
public DrawShape() {
}
public DrawShape(float width) {
circle.setFrame(100, 20, width, 300);
}
public void setWidth(int w) {
circle.setFrame(100, 20, w, 300);
revalidate();
}
@Override
public Dimension getPreferredSize() {
Dimension size = super.getPreferredSize();
size.width = circle.getBounds().width;
return size;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponents(g);
Graphics2D graphics = (Graphics2D) g;
graphics.setColor(Color.black);
graphics.fill(circle);
}//end paintComponent
}//end class