我正在嘗試使用布爾標誌來繪製基於按鈕單擊的圖形。之前,我在ShapeGUI類中將布爾值設置爲公共靜態布爾類型,並使用Shape.draw在ShapeListener中將其調用,並且工作正常,但花費大約10秒鐘的時間才能繪製圖形。Java Swing重繪速度緩慢或無法正常工作
現在我在ShapeListener類本身內部設置了布爾標誌。現在它不是重新粉刷就是很慢。點擊按鈕後,如何使圖形立即顯示?
public class ShapeGUI extends JFrame
{
public static final int WIDTH = 500;
public static final int HEIGHT = 500;
public ShapeGUI()
{
setSize(WIDTH, HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//setLayout(new FlowLayout());
setLocationRelativeTo(null);
JMenuBar menu = new JMenuBar();
JMenu file = new JMenu("File");
menu.add(file);
JMenuItem save = new JMenuItem("Save Information");
JMenuItem exit = new JMenuItem("Exit");
file.add(save);
file.add(exit);
setJMenuBar(menu);
ShapeListener test = new ShapeListener();
JButton button = new JButton("Hello");
test.setBackground(Color.CYAN);
button.addActionListener(new ShapeListener());
test.add(button);
add(test);
//followed this person's advice
//First off, your drawing should be done in a paintComponent method override that is held in a class that extends JPanel. Next, this class could have a boolean variable that the paintComponent uses to decide if it will draw a rectangle or not. The button press simply sets the boolean variable and calls repaint on the drawing JPanel.
}
}
public class ShapeListener extends JPanel implements ActionListener
{
boolean draw = false;
Shape s = new Circle();
Shape a = new Rectangle();
@Override
public void actionPerformed(ActionEvent e)
{
draw = true;
repaint();
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if(draw)
{
s.draw(g);
}
else
{
a.draw(g);
}
}
}
? 'Shape'沒有'draw'方法? – MadProgrammer