2016-01-04 119 views
0

任何人都可以給我一些信息我做錯了什麼?程序運行,但長方形或其他任何東西都不起作用。中間只有空的空間。我嘗試從kubuntu 15和windows上的terminal和eclipse打開該程序。始終以相同的結果。java圖形問題

我剛剛開始與java的冒險,所以請耐心等待。

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class MyGUI { 
JFrame frame; 
JLabel label; 

public static void main(String[] args) 
{ 
    MyGUI gui = new MyGUI(); 
    gui.go(); 
} 

public void go() 
{ 
    frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JButton labelButton = new JButton("Change label"); 
    labelButton.addActionListener(new LabelListener()); 

    JButton colorButton = new JButton("Change color"); 
    colorButton.addActionListener(new ColorListener()); 

    label = new JLabel("LABEL"); 
    DrawSmth2 drawPanel = new DrawSmth2(); 

    frame.getContentPane().add(BorderLayout.SOUTH, colorButton); 
    frame.getContentPane().add(BorderLayout.CENTER, drawPanel); 
    frame.getContentPane().add(BorderLayout.EAST, labelButton); 
    frame.getContentPane().add(BorderLayout.WEST, label); 

    frame.setSize(680,480); 
    frame.setVisible(true); 
} 

class LabelListener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent event) 
    { 
     label.setText("DONE"); 
    } 
} 

class ColorListener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) { 
     frame.repaint();   
    } 
} 
public class DrawSmth2 extends JPanel{ 

    public void PaintComponent(Graphics g) 
    { 
    g.setColor(Color.blue); 
    g.fillRect(0, 0, getWidth(), getHeight()); 
    } 
} 
} 
+0

請不要在某種程度上,它就會失效已經發布的答案改變你的問題。如果您有後續問題,請在新帖子中提問。 – Pshemo

+0

花2或3個月的時間學習[Oracle Swing教程](http://docs.oracle.com/javase/tutorial/uiswing/)。 –

回答

1

Java是大小寫敏感的,這意味着PaintComponent是不一樣的paintComponent。爲避免此類問題,請將@Override註釋添加到要覆蓋的方法中(如果不覆蓋現有方法,編譯器會通知您 - 有關更多信息:When do you use Java's @Override annotation and why?)。

另外,不要忘記在你自己實現paintComponent開始時調用super.paintComponent(g);讓Swing執行正確繪製該組件所需的標準操作。

+0

哦......這麼愚蠢的錯誤。謝謝,但現在單擊中間區域的colorButton顏色後沒有改變。 –

+0

@ pwl.salach你認爲哪部分代碼會改變顏色? – Pshemo

+0

我複製了paintComponent的最簡單版本。它應該繪製一個具有2種隨機顏色梯度的橢圓。但它總是黑色的。 –

0

只需添加gloabal變量計數;

int count=0; 
 
class ColorListener implements ActionListener 
 
{ 
 
    public void actionPerformed(ActionEvent e) { 
 
\t \t count++; 
 
     frame.repaint();   
 
    } 
 
} 
 
public class DrawSmth2 extends JPanel{ 
 

 
    public void paintComponent(Graphics g) 
 
    { 
 
\t if(count%2==1) \t 
 
    g.setColor(Color.blue); 
 

 
    g.fillRect(0, 0, getWidth(), getHeight()); 
 
\t 
 
    } 
 
}