2016-10-29 18 views
2

我已經發布了這一點,並取得了一些進展,按鈕仍然無法正常工作,但我認爲它更接近。任何人都可以告訴我需要更改哪些內容才能在用戶點擊後使其充分發揮作用?它應該在點擊時改變一條線的顏色。謝謝!JButton不工作,以改變線的顏色

JButton action =new JButton(); 
JButton red = new JButton(); 
JButton blue = new JButton(); 

public SimplePaint() { 

blue.setBackground(Color.BLUE);  
panel.add(blue); 

red.setBackground(Color.RED); 
    panel.add(red); 

} 

public void paint(Graphics g) { 
super.paint(g); 
Graphics2D g2 = (Graphics2D) g; 
Line2D line = new Line2D.Float(0, 250, 2000, 300); 
g2.setColor(Color.MAGENTA); 
g2.setStroke(new BasicStroke(3)); 
g2.draw(line);  

action.addActionListener(new ActionListener() {  
    public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == blue) { 
     g2.setColor(Color.BLUE); 
    } 
    else if(e.getSource() == red) { 
     g2.setColor(Color.RED); 
    } 
    repaint(); 
     } 
    }); 

} 

回答

1

這不是要走的路。當你點擊一個按鈕時,它將執行繪畫方法,它將再次以洋紅色繪製線條。您應該將顏色值移動到某個全局變量/字段中,並在actionPerformed中更改它的值,然後像您那樣調用repaint。

另一件事是,你不應該在paint方法中調用addActionListener,我不知道什麼是行爲JButton。無論如何,你可能想檢查一下(雖然沒有測試):

JButton red = new JButton(); 
JButton blue = new JButton(); 
Color color = Color.MAGENTA; 

public SimplePaint() { 

    blue.setBackground(Color.BLUE);  
    panel.add(blue); 

    red.setBackground(Color.RED); 
    panel.add(red); 

    ActionListener actionListener = new ActionListener() {  
     public void actionPerformed(ActionEvent e) { 
      if (e.getSource() == blue) { 
       color = Color.BLUE; 
      } else if (e.getSource() == red) { 
       color = Color.RED; 
      } 
      repaint(); 
     } 
    }; 

    blue.addActionListener(actionListener); 
    red.addActionListener(actionListener); 
} 

public void paint(Graphics g) { 
    super.paint(g); 
    Graphics2D g2 = (Graphics2D) g; 
    Line2D line = new Line2D.Float(0, 250, 2000, 300); 
    g2.setColor(color); 
    g2.setStroke(new BasicStroke(3)); 
    g2.draw(line); 
} 
+0

這很完美!非常感謝! :) – Millie

+0

隨時歡迎接受答案;) – maszter

+0

是的,先生,謝謝! :d – Millie