2015-12-02 4 views
0

Я хочу, чтобы нарисовать сетку (10x10) с использованием Java, но мы должны реализовать его с помощью drawRectMethod в JFrame, это моя программа до сих порРисование Java сетки с использованием свинг

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

public class Grid extends JFrame { 

    public Grid() { 
     setSize(500, 500); 
     setVisible(true); 
    } 

    // draw grid 
    public void paint(Graphics g) { 
     for (int x = 30; x <= 300; x += 30) 
      for (int y = 30; y <= 300; y += 30) 
       g.drawRect(x, y, 30, 30); 
    } 

    public static void main(String args[]) { 
     Grid application = new Grid(); 
     application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 
+1

Что ваш вопрос? – sMaN

+0

Эта программа не дает выхода, я что-то пропустил? –

+0

Выглядит хорошо до сих пор, но вы не должны расширяться от 'JFrame' и переопределять его метод' paint' – MadProgrammer

ответ

1

Этот код за работой.

Просто удалите 25

import java.awt.*; 
import javax.swing.*; 
public class Grid extends JFrame { 

public Grid() {  
setSize(500, 500); 
setVisible(true); 
} 
public void paint(Graphics g)  
{ 
for (int x = 30; x <= 300; x += 30) 
for (int y = 30; y <= 300; y += 30) 
g.drawRect(x, y, 30, 30); 

} 
public static void main(String args[]) 
{ 
    Grid application = new Grid(); 
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } 
1

Я не уверен, что ваш вопрос, но ваша реализация немного от ...

  • Не простираться от JFrame, вы не добавляя никаких новых функциональных возможностей в класс, и он не является хорошим кандидатом для выполнения пользовательской раскраски, поскольку он не является двойной буферизацией, и он имеет JRootPane и contentPane между поверхностью кадра и пользователем. Кроме того, вы рискуете рисовать под украшениями рамок. Посмотрите на How can I set in the midst? и How to get the EXACT middle of a screen, even when re-sized для более подробной информации.
  • Не переопределяйте paint контейнеров верхнего уровня (или вообще), см. Предыдущую точку. Вместо этого начните с компонента, который простирается от чего-то вроде JPanel и вместо этого переопределяет paintComponent. Также не забудьте вызвать метод окраски super, чтобы поддерживать контракт с краской. Посмотрите Painting in AWT and Swing и Performing Custom Painting для получения более подробной информации.
  • Не полагайтесь на магические числа, вместо этого используйте известные значения, чтобы принимать решения о том, что вы хотите сделать.

Grid

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

public class Grid { 

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

    public Grid() { 
     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(200, 200); 
     } 

     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g.create(); 
      int size = Math.min(getWidth() - 4, getHeight() - 4)/10; 
      int width = getWidth() - (size * 2); 
      int height = getHeight() - (size * 2); 

      int y = (getHeight() - (size * 10))/2; 
      for (int horz = 0; horz < 10; horz++) { 
       int x = (getWidth() - (size * 10))/2; 
       for (int vert = 0; vert < 10; vert++) { 
        g.drawRect(x, y, size, size); 
        x += size; 
       } 
       y += size; 
      } 
      g2d.dispose(); 
     } 

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