我想使用JPanel繪製一個矩形。問題是,當我點擊一個菜單項時,它應該繪製一個新的矩形。但是,當我這樣做時,只有一部分被繪製。這裏是我的意思是:使用JPanel在按鈕上點擊一個矩形使用JPanel
rectangleMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
squares.addSquare(10, 10, 100, 100);
}
});
做到這一點:
,但是當我把squares.addSquare(...)
OUTSIDE中的ActionListener的,它提供了正確的形狀(只是沒有當我想它)
squares.addSquare(10, 10, 100, 100);
rectangleMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
//nothing on click...
}
});
,這裏是正確的矩形:
任何想法爲什麼它不能正確繪製時,我把它放在ActionListener?謝謝。
全碼
class UMLWindow extends JFrame {
Squares squares = new Squares();
private static final long serialVersionUID = 1L;
public UMLWindow() {
addMenus();
}
public void addMenus() {
getContentPane().add(squares);
//squares.addSquare(10, 10, 100, 100);
JMenuBar menubar = new JMenuBar();
JMenu file = new JMenu("File");
file.setMnemonic(KeyEvent.VK_F);
JMenu shapes = new JMenu("Shapes");
file.setMnemonic(KeyEvent.VK_F);
JMenuItem rectangleMenuItem = new JMenuItem("New Rectangle");
rectangleMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
squares.addSquare(10, 10, 100, 100);
}
});
shapes.add(rectangleMenuItem);
menubar.add(shapes);
setJMenuBar(menubar);
setTitle("UML Editior");
setSize(300, 200);
setLocationRelativeTo(null);
}
}
class Squares extends JPanel {
private static final long serialVersionUID = 1L;
private List<Rectangle> squares = new ArrayList<Rectangle>();
public void addSquare(int x, int y, int width, int height) {
Rectangle rect = new Rectangle(x, y, width, height);
squares.add(rect);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
this.setOpaque(true);
this.setBackground(Color.WHITE);
Graphics2D g2 = (Graphics2D) g;
for (Rectangle rect : squares) {
g2.draw(rect);
}
}
}
@Bene:請做出答案。好處?你去哪兒了? – 2014-09-24 20:42:25
是的,這工作。如果它成爲答案,我會接受 – Harry 2014-09-24 20:45:47
@Harry如果Bene不回來,請隨時自己回答 – 2014-09-24 20:53:06