Хорошо, моя программа должна рисовать * 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);
}
}