• <small id='tfcTq'></small><noframes id='tfcTq'>

    <i id='tfcTq'><tr id='tfcTq'><dt id='tfcTq'><q id='tfcTq'><span id='tfcTq'><b id='tfcTq'><form id='tfcTq'><ins id='tfcTq'></ins><ul id='tfcTq'></ul><sub id='tfcTq'></sub></form><legend id='tfcTq'></legend><bdo id='tfcTq'><pre id='tfcTq'><center id='tfcTq'></center></pre></bdo></b><th id='tfcTq'></th></span></q></dt></tr></i><div id='tfcTq'><tfoot id='tfcTq'></tfoot><dl id='tfcTq'><fieldset id='tfcTq'></fieldset></dl></div>

      <legend id='tfcTq'><style id='tfcTq'><dir id='tfcTq'><q id='tfcTq'></q></dir></style></legend>
    1. <tfoot id='tfcTq'></tfoot>
        <bdo id='tfcTq'></bdo><ul id='tfcTq'></ul>

      1. 在Java中为网格创建绘制矩形(填充黑色)函数

        时间:2024-08-24

        <small id='SctGd'></small><noframes id='SctGd'>

            <tbody id='SctGd'></tbody>
            <i id='SctGd'><tr id='SctGd'><dt id='SctGd'><q id='SctGd'><span id='SctGd'><b id='SctGd'><form id='SctGd'><ins id='SctGd'></ins><ul id='SctGd'></ul><sub id='SctGd'></sub></form><legend id='SctGd'></legend><bdo id='SctGd'><pre id='SctGd'><center id='SctGd'></center></pre></bdo></b><th id='SctGd'></th></span></q></dt></tr></i><div id='SctGd'><tfoot id='SctGd'></tfoot><dl id='SctGd'><fieldset id='SctGd'></fieldset></dl></div>
            <tfoot id='SctGd'></tfoot>
            • <bdo id='SctGd'></bdo><ul id='SctGd'></ul>
            • <legend id='SctGd'><style id='SctGd'><dir id='SctGd'><q id='SctGd'></q></dir></style></legend>

                1. 本文介绍了在Java中为网格创建绘制矩形(填充黑色)函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我在我的程序中创建了一个网格.下面是用于创建网格的代码.

                  I have created a grid in my program. Below is the code used to create the grid.

                  import java.awt.Graphics;
                  
                  import javax.swing.JComponent;
                  import javax.swing.JFrame;
                  
                  class Grid extends JComponent {
                      public void paint(Graphics g) {
                          g.drawRect (10, 10, 800, 500);    
                  
                          for (int i = 10; i <= 800; i+= 10)
                              g.drawLine (i, 10, i, 510);
                  
                          for (int i = 10; i <= 500; i+= 10)
                              g.drawLine (10, i, 810, i);
                      }
                  }
                  
                  public class CoreControl {
                  
                      public static void main(String[] a) {
                          JFrame window = new JFrame();
                          window.setSize(840,560);
                          window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                          window.getContentPane().add(new Grid());
                          window.setVisible(true);
                      }
                  
                  }
                  

                  我想做的是创建一个函数,该函数将根据我给它的坐标绘制一个矩形(用黑色填充).基本上我想用黑色填充网格的某些单元格,我的想法是在单元格坐标上绘制黑色填充矩形.如何实现这个功能?

                  What I want to do is to create a function which will draw a rectangle (filled with black color) based on the coordinates that I give it. Basically I want to populate certain cells of the grid with black color and my idea is to draw black filled rectangles on the cell coordinates. How do I make this function?

                  我尝试创建另一个名为 drawRectangle 的类并在主函数中调用它,例如 window.getContentPane().add(new drawRectangle());但这不起作用(只显示 drawRectangle 而不是网格).

                  I tried making another class called drawRectangle and called it in the main function like so window.getContentPane().add(new drawRectangle()); however that did not work (only drawRectangle shows up and not the grid).

                  我还希望能够反复使用此功能来不断创建矩形.

                  I also want to be able to use this function repeatedly to keep creating rectangles.

                  如何创建这个函数?

                  另外,如果您知道我应该构建这个程序的更好方法,请告诉我(我是 Java 新手,所以我愿意接受任何建议).

                  Also if you know a better way that I should structure this program please let me know (I am new to Java so I am open to any suggestions).

                  推荐答案

                  1. 不要使用paint,使用paintComponent并且不要忘记调用super.paintComponent
                  2. JComponent 可能不是最佳选择,JPanel 可能是更好的选择
                  3. Graphics#fillRect(int, int, int, int)?
                  1. Don't use paint, use paintComponent and don't forget to call super.paintComponent
                  2. JComponent may not be the best choice, JPanel is probably a better choice
                  3. What's wrong with Graphics#fillRect(int, int, int, int)?

                  您可以看看 Performing Custom Painting 和 2D 图形了解更多详情.

                  You might to take a look at Performing Custom Painting and 2D Graphics for more details.

                  我建议不要尝试使用第二个组件来执行填充.只需在网格类中提供一个方法,该方法提供单元格的 x/y 位置(以网格形式)并在 paintComponent 方法中填充单元格

                  I'd advice against trying to have a second component to performing the filling. Simply provide a method in you grid class that supplies the cell's x/y position (in grid terms) and fill the cell within the paintComponent method

                  更新示例

                  import java.awt.Color;
                  import java.awt.EventQueue;
                  import java.awt.Graphics;
                  import java.awt.Point;
                  import java.util.ArrayList;
                  import java.util.List;
                  import javax.swing.JFrame;
                  import javax.swing.JPanel;
                  import javax.swing.UIManager;
                  import javax.swing.UnsupportedLookAndFeelException;
                  
                  public class CoreControl {
                  
                      public static class Grid extends JPanel {
                  
                          private List<Point> fillCells;
                  
                          public Grid() {
                              fillCells = new ArrayList<>(25);
                          }
                  
                          @Override
                          protected void paintComponent(Graphics g) {
                              super.paintComponent(g);
                              for (Point fillCell : fillCells) {
                                  int cellX = 10 + (fillCell.x * 10);
                                  int cellY = 10 + (fillCell.y * 10);
                                  g.setColor(Color.RED);
                                  g.fillRect(cellX, cellY, 10, 10);
                              }
                              g.setColor(Color.BLACK);
                              g.drawRect(10, 10, 800, 500);
                  
                              for (int i = 10; i <= 800; i += 10) {
                                  g.drawLine(i, 10, i, 510);
                              }
                  
                              for (int i = 10; i <= 500; i += 10) {
                                  g.drawLine(10, i, 810, i);
                              }
                          }
                  
                          public void fillCell(int x, int y) {
                              fillCells.add(new Point(x, y));
                              repaint();
                          }
                  
                      }
                  
                      public static void main(String[] a) {
                          EventQueue.invokeLater(new Runnable() {
                              @Override
                              public void run() {
                                  try {
                                      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                                  } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                                  }
                  
                                  Grid grid = new Grid();
                                  JFrame window = new JFrame();
                                  window.setSize(840, 560);
                                  window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                  window.add(grid);
                                  window.setVisible(true);
                                  grid.fillCell(0, 0);
                                  grid.fillCell(79, 0);
                                  grid.fillCell(0, 49);
                                  grid.fillCell(79, 49);
                                  grid.fillCell(39, 24);
                              }
                          });
                      }
                  }
                  

                  这篇关于在Java中为网格创建绘制矩形(填充黑色)函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:将 jTable 行及其网格线复制到 excel/word 文档中 下一篇:Vaadin 8.5.1- 行更新后刷新网格

                  相关文章

                2. <i id='gSBma'><tr id='gSBma'><dt id='gSBma'><q id='gSBma'><span id='gSBma'><b id='gSBma'><form id='gSBma'><ins id='gSBma'></ins><ul id='gSBma'></ul><sub id='gSBma'></sub></form><legend id='gSBma'></legend><bdo id='gSBma'><pre id='gSBma'><center id='gSBma'></center></pre></bdo></b><th id='gSBma'></th></span></q></dt></tr></i><div id='gSBma'><tfoot id='gSBma'></tfoot><dl id='gSBma'><fieldset id='gSBma'></fieldset></dl></div>

                  <small id='gSBma'></small><noframes id='gSBma'>

                  <legend id='gSBma'><style id='gSBma'><dir id='gSBma'><q id='gSBma'></q></dir></style></legend>
                  • <bdo id='gSBma'></bdo><ul id='gSBma'></ul>

                  <tfoot id='gSBma'></tfoot>