2015-04-01 114 views
0
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class CirclePanel extends JPanel { 
private JTextField xField, yField, diameterField; 
private JButton Redraw; 
private JLabel xLabel, yLabel, rLabel; 
Circle myCircle = new Circle (150, 150, 30, Color.red, Color.white); 
Graphics g; 
//Paint objects on panel 
public void paintComponent (Graphics page) { 
super.paintComponent(page); 
g = page; 
myCircle.draw(g); 
} 

public CirclePanel(){ 
    xLabel = new JLabel("X= "); 
    yLabel = new JLabel("Y= "); 
    rLabel = new JLabel("R= "); 

    xField = new JTextField(5); 
    xField.addActionListener(new TempListener()); 

    yField = new JTextField(5); 
    yField.addActionListener(new TempListener()); 

    diameterField = new JTextField(5); 
    diameterField.addActionListener(new TempListener()); 

    Redraw = new JButton("Redraw!"); 
    Redraw.addActionListener(new ButtonListener()); 

    add(xLabel); 
    add(xField); 
    add(yLabel); 
    add(yField); 
    add(rLabel); 
    add(diameterField); 
    add(Redraw); 

    setPreferredSize(new Dimension(500, 500)); 
    setBackground(Color.white); 
    } 
    private class ButtonListener implements ActionListener{ 

    public void actionPerformed (ActionEvent event) { 

     //Update page 
     myCircle.draw(g); 
     //repaint panel 
     repaint(); 
     } 
    private class TempListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
      int x, y, newbase, newhei; 

      String text = xField.getText(); 
      String text2 = yField.getText(); 

      x = Integer.parseInt (text); 
      y = Integer.parseInt (text2); 


      myCircle.draw(g); 

      repaint(); 





     } 

    } 
} 
} 

嗨,大家好,我正在做的Java應用程序,繪製一個圓圈,並用JTextField中的新值重新繪製它。我爲它寫了三堂課。其中之一是包含訪問器,增變器,構造函數。其中一個課程具有課程的主要方法,其中一個課程在上面。但TempListener不起作用。你可以幫我嗎?Java不能讓TempListener工作

+0

請說明您的問題,因爲如果我們不知道你想做什麼。你說「TempListener不工作」,但它應該做什麼?你似乎認爲我們已經讀完了你的整個任務並且能夠閱讀頭腦。我們不能。 – 2015-04-01 16:15:49

+0

請勿在班級中使用圖形字段。僅在paintComponent中使用本地Graphics對象。換句話說,除掉你的'g'變量,你的TempListener ActionListener不應該調用任何關閉g的方法,甚至不應該看到一個Graphics對象。它應該只是改變變量狀態並調用repaint。閱讀更多的圖形教程。 [課程:執行自定義繪畫](http://docs.oracle.com/javase/tutorial/uiswing/painting/index.html)。 – 2015-04-01 16:17:05

回答

1

您應該從程序中獲取圖形字段g。而是使用本地Graphics變量,即在paintComponent方法內調用page的變量,但不要在其他任何地方使用它。

建議:

  • 有你的ActionListener進行更改myCircle對象的狀態,你的代碼沒有做到這一點。
  • 然後撥打電話repaint()
  • 從你的ActionListener中獲取此,myCircle.draw(g);,因爲它不屬於那裏。
  • 閱讀搖擺圖文教程:Lesson: Performing Custom Painting
+0

我複製並粘貼到Eclipse以幫助我比JCreator和ecplipse說CirclePanel.ButtonListener.TempListener類型從來沒有在本地使用。所以我的問題結果我的程序不能找到templistener(我不知道如何以及爲什麼)你有什麼想法嗎? – Emre 2015-04-01 16:55:41