обновлять сетку каждый раз, когда я нажимаю кнопку - PullRequest
0 голосов
/ 03 ноября 2019

Хорошо, моя программа должна рисовать * n сетку. n является целым числом пользовательского ввода. сейчас моя проблема в том, что я не могу понять, как я могу обновлять сетку новым значением при каждом нажатии кнопки. Я должен перезапустить программу, чтобы увидеть новый результат. У меня есть 3 файла

GridFrame.java

import java.awt.Dimension;
import java.awt.Graphics;
   import java.awt.Graphics2D;
   import java.awt.event.ActionEvent;
   import java.awt.event.ActionListener;
   import javax.swing.JButton;
   import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.awt.Dimension;
/**
  A frame that shows a n * n grid.
*/
public class GridFrame extends JFrame
{
  /**
    * 
    */
   private static final long serialVersionUID = 1L;
public GridFrame()
  {  


  // Use helper methods 
  createTextField();
  createButton();
  createPanel();
  setSize(FRAME_WIDTH, FRAME_HEIGHT);
  }

  private void createTextField()
  {
  countLabel = new JLabel("Count");

  final int FIELD_WIDTH = 10;
  countField = new JTextField(FIELD_WIDTH);
  countField.setText(10 + "");


  }

  private void createButton()
  {
  button = new JButton("Draw");


  class GridListener implements ActionListener
  {
     public void actionPerformed(ActionEvent event)
     {

         component = new GridComponent(Integer.parseInt(countField.getText()));
         panel.add(component);
         panel.updateUI();

     }            
  }

  ActionListener listener = new GridListener();
  button.addActionListener(listener);


  }



  private void createPanel()
  {
  panel = new JPanel();
  panel.add(countLabel);
  panel.add(countField);
  panel.add(button);


  add(panel);
}

private JLabel countLabel;
private JTextField countField;


private JButton button;


private JPanel panel;

public GridComponent component;
private static final int FRAME_WIDTH = 500;
private static final int FRAME_HEIGHT = 500;



}

GridComponent.java

import javax.swing.JComponent;
import java.awt.Rectangle;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Dimension;

public class GridComponent extends JComponent
{

/**
 * 
 */
private static final long serialVersionUID = 1L;
public GridComponent(int n)
{
side = n;
setPreferredSize(new Dimension(1000, 1000));

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



        int count = side;
        int size = 40;

        for( int i = 0; i < count; i ++)
        {
            for( int j = 0; j < count; j++)
            {
            Rectangle grid = new Rectangle( 300 + i * size, 20 + j * size, size, size); 
            g2.draw(grid);

            }
        }



 }
private int side;

}

и gridviewer.java

import javax.swing.JFrame;
/**
   This frame displays a grid with a size the user specified.
*/
public class GridViewer
{
   public static void main(String[] args)
   {
  JFrame frame = new GridFrame();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setTitle("GridViewer");
  frame.setVisible(true);
   }
}
...