2014-12-20 34 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(); 
     } 

    } 

}