private static final long serialVersionUID = 1L;
String[] options = {"1","2","4","8","16","20","40","100","400"} ;
int[] optionsNum = {1,2,4,8,16,20,40,100,400};
JComboBox<String> box = new JComboBox<>(options);
JLabel prompt = new JLabel("How complex do you want the circle to be?");
ImageIcon image;
Circle p = new Circle(1);
int boxindex = 0;
public CircleDrawer(){
image = new ImageIcon(p.getImage());
box.setSelectedIndex(boxindex);
setLayout(new FlowLayout());
add(new JLabel(image));
add(prompt);
add(box);
pack();
setSize(851, 950);
setTitle("Circle Drawer");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
box.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == box){
boxindex = box.getSelectedIndex();
p.setComplexity(optionsNum[boxindex]);
image = new ImageIcon(p.getImage());
add(new JLabel(image));
validate();
}
}
public static void main(String[] args) {
CircleDrawer f = new CircleDrawer();
f.setVisible(true);
}
В принципе, у меня есть этот код. Он ссылается на класс под названием Circle
, который вычисляет некоторые точки на внешнем краю круга и рисует их с помощью paintComponent
. В этом классе есть метод, называемый getImage
, который использует метод paintComponent
и помещает его в BufferedImage.Как сделать этот ActionListener полностью re-draw JFrame?
public BufferedImage getImage() {
BufferedImage hello = new BufferedImage(805, 805, BufferedImage.TYPE_INT_ARGB);
Graphics g = hello.getGraphics();
paintComponent(g);
return hello;
}
Нравится так.
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти способ полностью перерисовать JFrame
. Я пытался очистка JFrame
в рамках метода actionPerformed
с помощью removeAll()
, а затем ПОЛНОСТЬЮ настройка кадра снова (add
всех компонент, pack
, setSize
, setTitle
и т.д.), а затем repaint
, revalidate
, или просто validate
это.
Если я просто это add
изображение, а затем validate
это, я могу видеть изображение обновляется, но это просто получать пристегивается в конце JFrame
(так же, как я бы ожидать, что она с помощью FlowLayout
), но это не то поведение, в котором я нуждаюсь. Это просто показывает, что это своего рода работа.
Мой вопрос заключается в следующем: как мне сделать повторное рисование JFrame
, когда пользователь меняет параметры внутри JComboBox
?
Для лучшей помощи раньше, опубликовать [SSCCE] (http://sscce.org /). –