2016-04-16 2 views
0

Я только начал изучать Java, и теперь я недавно изучаю новые вещи за пределами консоли. Я скопировал код из доски профессора, но я не могу заставить его работать. Предположим теперь нарисовать круги и прямоугольники, но я просто получаю пустое окно, когда пытаюсь рисовать. Думаю, я, возможно, пропустил строку кода или что-то в этом роде. Я использую Eclipse на Mac.Картина Java Code в JPanel

Я понимаю, что может быть много способов сделать это, но я хочу, чтобы код был точно таким, как у него есть на данный момент, кроме того, какие исправления, по вашему мнению, заставят его работать. Большое спасибо.

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

public class Bunny { 
    public static void main(String [] args) 
    { 
     MyFrame f = new MyFrame(); 
    f.setSize(500,400); 
    f.setVisible(true); 
    f.setLocation(50,100); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
    } 






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

public class MyFrame extends JFrame 
    { 
     public MyFrame() 
     { 
     } 
    } 



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


public class MyPanel extends JPanel 
{ 
public void paintComponent(Graphics g) 
{Graphics2D g2 = (Graphics2D) g; 


Ellipse2D.Double Circle = new Ellipse2D.Double(100,50,75,75); 

g2.setColor(Color.RED); 
g2.fill(Circle); 

Rectangle box = new Rectangle(200,100,150,150); 
g2.setColor(Color.RED); 
g2.fill(box); 

Color myColor = new Color(255,0,0); 
} 
} 
+0

Напишите код в 'jbInit()'. –

ответ

3

Я хотел бы, очень много, рассказать своему профессору, что они должны вернуться в школу и узнать, как использовать свинг правильно

Вы должны начать принимать взглянуть на Painting in AWT and Swing и Performing Custom Painting для более подробную информацию о том, как покрасочные работы в свинг

Example

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.awt.geom.Ellipse2D; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

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

    public Test() { 
     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 { 

     public TestPane() { 
     } 

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

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2 = (Graphics2D) g.create(); 
      Ellipse2D.Double Circle = new Ellipse2D.Double(100, 50, 75, 75); 

      g2.setColor(Color.RED); 
      g2.fill(Circle); 

      Rectangle box = new Rectangle(200, 100, 150, 150); 
      g2.setColor(Color.RED); 
      g2.fill(box); 
      g2.dispose(); 
     } 

    } 

} 

код Обзор ...

public class Bunny { 

    public static void main(String[] args) { 
     MyFrame f = new MyFrame(); 
     f.setSize(500, 400); 
     f.setVisible(true); 
     f.setLocation(50, 100); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

Плохо: Взаимодействие с пользовательским интерфейсом извне контекста события Диспетчерская тема. См Initial Threads подробности

public class MyFrame extends JFrame { 

    public MyFrame() { 
    } 
} 

Bad: Удлинение из контейнера верхнего уровня (подобно JFrame), как правило, препятствуют, вы не добавляя новые функции в классе, и это одна из областей, где происходит большинство проблем , Возможно, вам захочется провести некоторое исследование «состав над наследованием».

Вы также на самом деле ничего не добавляете к кадру, поэтому оно будет выглядеть пустым.

public class MyPanel extends JPanel { 

    public void paintComponent(Graphics g) { 
     Graphics2D g2 = (Graphics2D) g; 

     Ellipse2D.Double Circle = new Ellipse2D.Double(100, 50, 75, 75); 

     g2.setColor(Color.RED); 
     g2.fill(Circle); 

     Rectangle box = new Rectangle(200, 100, 150, 150); 
     g2.setColor(Color.RED); 
     g2.fill(box); 

     Color myColor = new Color(255, 0, 0); 
    } 
} 

Bad: paintComponent никогда не должен быть public, нет никаких оснований когда-либо, что любой другой класс должен вызывать этот метод. Не вызывая super.paintComponent, это не вызовет ошибок графических ошибок и проблем, вы всегда должны сначала позвонить super.paintComponent. Единственный раз, когда вы не были, когда вы знаете, что делаете, и у вас есть очень веская причина не ..., которая похожа на < 1% времени.

+0

dam thanks alot man, да он не мой идеальный учитель, но hes все, что у меня есть. –

Смежные вопросы