2013-04-06 137 views
0

我試圖在指定的位置顯示一個矩形,但它沒有顯示出來。背景是洋紅色,但矩形不在那裏。Java不顯示矩形?

另外:我怎樣才能獲得更多的顏色除了

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


class Screensaver { 
    private final static int FRAME_HEIGHT = 600; 
    private final static int FRAME_WIDTH = 600; 
    public static void main(String[] args){ 
     JFrame win; 
     Container contentPane; 
     Graphics g; 


     win = new JFrame(); 
     win.setSize(FRAME_WIDTH, FRAME_HEIGHT); 
     win.setVisible(true); 
     contentPane = win.getContentPane(); 
     contentPane.setBackground(Color.MAGENTA); 
     g = contentPane.getGraphics(); 
     g.setColor(Color.BLACK); 
     g.fillRect(80, 350, 400, 250); 

    } 
} 
+0

'g = contentPane.getGraphics();'千萬不要這樣做,而是在繪畫請求時繪製。 – 2013-04-06 23:15:42

回答

3

你不應該主要是畫();「顏色(插入選項非常少在這裏)。」最好是擴展JPanel,更改paintComponent(),並將面板添加到JFrame中。

public class PaintPanel extends JPanel { 

    public PaintPanel() { 
     setBackground(Color.MAGENTA); 
    } 

    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); // This paints the background 

     g.setColor(Color.BLACK); 
     g.fillRect(80, 350, 400, 250); 
    } 
} 

而且在main():

public static void main(String[] args) { 
    JFrame frame = new JFrame(); 
    frame.add(new PaintPanel()); 
    frame.setVisible(true); 
} 

如果你想使自己的顏色,你可以使用新的顏色(紅INT,INT綠,藍INT)構造函數。

+0

沒想到我想出來了 – 2013-04-06 20:17:08

0

試試這個:

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

class Screensaver { 

    private final static int FRAME_HEIGHT = 600; 
    private final static int FRAME_WIDTH = 600; 

    public static void main(String[] args) { 
     JFrame win; 
     Container contentPane; 
     win = new JFrame(); 
     win.setSize(FRAME_WIDTH, FRAME_HEIGHT); 
     win.setVisible(true); 
     Component comp = new Component(); 
     contentPane = (Container) win.getContentPane().add(comp); 


    } 
    } 

    class Component extends JComponent { 

    @Override 
    public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
     g.setColor(Color.magenta); 
     g.fillRect(0, 0, getWidth(), getHeight()); 
     g.setColor(Color.BLACK); 
     g.fillRect(80, 350, 400, 250); 
    } 
} 

和有關的顏色,你麪包車創建新的顏色,當你想設置的紅,綠,藍,試試這個:

g.setColor(new Color(red, green, blue)); 
+1

執行自定義繪畫的推薦方法是paintComponent。你也應該調用super.paint/pantComponent – MadProgrammer 2013-04-06 20:34:55

+0

我不知道'paint'方法有什麼問題?我運行它並且沒問題,所以請告訴我錯誤在哪裏? – 2013-04-06 20:48:11

+0

http://www.java2s.com/Tutorial/Java/0261__2D-Graphics/DrawRectangle.htm:java教程 – 2013-04-06 20:51:04

-1

的繪製矩形曾經,但每次調用JFrames repaint()方法時,都會將其擦除並繪製基本組件。要在JFrame中添加自定義繪圖,您必須重寫繪製方法。在這裏,我稍微改進了一下你的代碼,讓你開始沿着這條路走下去正如你所看到的,你想在Paint方法中繪製這個盒子。我製作了一個Container元素,用於繪製圖形並移除背景顏色,並將其添加到繪製方法中。

試試這個

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

public class JavaApplication10 { 
    private final static int FRAME_HEIGHT = 600; 
    private final static int FRAME_WIDTH = 600; 
    public static void main(String[] args){ 
     JFrame win = new JFrame(); 
     win.setContentPane(new MyBoxContainer()); 
     win.setSize(FRAME_WIDTH, FRAME_HEIGHT); 
     win.setVisible(true); 
    } 

    private static class MyBoxContainer extends Container { 
     @Override 
     public void paint(Graphics g) { 
      super.paint(g); 
      g.setColor(Color.MAGENTA); 
      g.fillRect(0, 0, getWidth(), getHeight()); 
      g.setColor(Color.BLACK); 
      g.fillRect(80, 350, 400, 250); 
     } 
    } 
} 
+0

1-當OP使用Swing時想從AWT組件中擴展2-自定義繪畫的推薦方法是JComponent#paintComponent – MadProgrammer 2013-04-06 20:32:16

0

如果你想畫的東西創建從一個Swing容器,JComponent的,JPanel的,等繼承一個類並重寫油漆(圖形G)的方法。如果您看到品紅色背景,則必須添加contentPane。可能發生的事情是它的畫在你矩形上的洋紅色背景,但這只是一個猜測。試試這個...

public class ContentPane extends JComponent { 
    public ContentPane() { 

    } 

    @Override 
    public void paint(Graphics g) { 
      g.setColor(Color.MAGENTA); 
      g.fillRect(0, 0, getWidth(), getHeight()); 

      g.setColor(Color.BLACK); 
      g.fillRect(80, 350, 400, 250); 

    } 
} 

然後在你的主類實例的contentPane類的一個對象,並把它添加到你的JFrame。重繪repaint()的調用可能是不必要的,但這將確保它被繪製。你也可以嘗試使用paintComponent(Graphics g)方法,兩者之間有區別,我相信它是從update方法調用的順序,但我可能錯了,但是這應該解決你的問題問題。

至於顏色,請查閱API。您可以將RGB值傳遞給Color構造函數以創建各種顏色。顏色顏色=新顏色(int紅色,int綠色,int藍色)。我認爲這是創建自定義顏色的最簡單方法,但就像我在API中說的那樣。希望這可以幫助。

+1

推薦方法執行自定義繪畫將是paintComponent。你應該打電話super.paint,你永遠不應該在任何繪畫方法中調用repaint EVER – MadProgrammer 2013-04-06 20:33:41

+0

正確,我只是把它扔在那裏,以確保一切都被繪製,但你是正確的,它應該從另一個線程調用。我現在編輯它。 – 2013-04-06 20:44:46

+0

應在EDT上下文中調用repaint,而不是在任何繪製方法中調用 – MadProgrammer 2013-04-06 20:52:49