2014-12-20 37 views
-4

我使用Java來繪製橢圓,並通過線路將它們連接起來,當我掃描變量油漆功能完全不Java的塗料功能不起作用

import java.awt.Color; 
import javax.swing.JFrame; 
import java.awt.Graphics; 
import java.awt.Paint; 
import java.util.Random; 
import java.util.Scanner; 
import javax.swing.JOptionPane; 

public class Main extends JFrame { 
    public Main(){ 
     setTitle("Graph"); 
     setSize(1000, 1000); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public void paint (Graphics g,int x,int z,int y) { 
     g.fillOval(x, x+20, 40, 40); 
     g.drawLine(x+10, x+50,x+z+10, z+30); 
     g.fillOval(x+z, z, 40, 40); 
    } 

    public static void main(String[] args) { 
     Scanner scan=new Scanner(System.in); 
     int x = scan.nextInt(); 
     int z =scan.nextInt(); 
     int y =scan.nextInt(); 

     x=x+1; 
     z=z+1; 
     y=y+1; 

     Main m=new Main(); 
     Graphics g=m.getGraphics(); 
     m.paint(g, x, z, y); 
    } 
} 
+0

下一次請花些時間選擇適當的標題和正確的代碼格式。 –

+0

好吧,我會的,這是我第一次 –

+0

它不起作用?它有什麼作用?你爲什麼向我們展示這麼多代碼?只有給我們一個[MCVE](http://stackoverflow.com/help/mcve) –

回答

0

工作,必須重寫的JFrame '畫法。除非你這樣做,它不會畫到框架上,看了這個, Overriding and Hiding Methods

這裏是一個示範

public class Main extends JFrame { 

    int x; 
    int y; 
    int z; 

    public Main(int x, int y, int z) { 
     this.x = x; 
     this.y = y; 
     this.z = z; 
     setTitle("Graph"); 

     setSize(1000, 1000); 

     setVisible(true); 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    @Override 
    public void paint(Graphics g) { 

     g.fillOval(x, x + 20, 40, 40); 

     g.drawLine(x + 10, x + 50, x + z + 10, z + 30); 

     g.fillOval(x + z, z, 40, 40); 
    } 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 

     int x = scan.nextInt(); 
     int z = scan.nextInt(); 
     int y = scan.nextInt(); 
     x = x + 1; 
     z = z + 1; 
     y = y + 1; 
     Main m = new Main(x, y, z); 

    } 
} 
1

Graphics g=m.getGraphics();並不怎麼風俗畫是在Swing從能夠做,除了久違null ,它僅僅是上次繪製的內容的「快照」,並且可以在任何時間繪製。

public void paint (Graphics g,int x,int z,int y) {不是在繪製過程中調用的方法。 Java不會奇蹟般地知道這個方法可以用於繪畫,你需要告訴它。

而且,你不應該基於混合控制檯輸入與圖形用戶界面,在

選擇一個或其他...

開始通過查看

有關如何繪畫在Swing中的更多詳細信息。

您應該避免直接繪製到頂層容器(如JFrame),除了實際上並未向框架添加任何新功能,它們(頂層容器)沒有雙緩衝並且可能會在更新期間導致閃爍並導致閃爍JFrame(和JWindowJApplet)有JRootPane和框架和用戶之間的內容窗格(有時是玻璃窗格),這可能會導致任何數量的繪畫問題。

更好的解決方案是基於像一個JPanel創建一個自定義組件,並覆蓋它的paintComponent(確保調用super.paintComponent你做任何自定義塗裝前)

Example

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Main101 { 

    public static void main(String[] args) { 
     new Main101(); 
    } 

    public Main101() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private int x = 10; 
     private int z = 10; 

     public TestPane() { 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g.create(); 
      g2d.fillOval(x, x + 20, 40, 40); 

      g2d.drawLine(x + 10, x + 50, x + z + 10, z + 30); 

      g2d.fillOval(x + z, z, 40, 40); 
      g2d.dispose(); 
     } 

    } 

}