我对如何将文本字段中给出的大小传递到我的大小 int 感到困惑
Am puzzled on how I would be able to pass what is given inside the textfield for size into my size int
package SOS;
import java.awt.Graphics;
import javax.swing.*;
public class BoardPanel extends JPanel {
public static void main(String[] args) {
JFrame frame = new JFrame("SOS");
frame.setSize(600, 600);
JLabel sizelabel = new JLabel("Board size:");
frame.add(sizelabel);
sizelabel.setBounds(500, 100, 30, 30);
JTextField boardsize = new JTextField();
boardsize.setBounds(500, 100, 30, 30);
frame.add(boardsize);
String value = boardsize.getText();
BoardPanel panel = new BoardPanel();
frame.add(panel);
frame.setVisible(true);
}
private static final long serialVersionUID = 1L;
static final int size = Integer.parseInt(boardsize.getText());;
static final int cols = size;
static final int rows = size;
static final int originX = 73/size;
static final int originY = 97/size;
static final int cellSize = 300/size;
}
}
只是无法弄清楚如何将 String value = boardsize.getText();
传递给静态 final int size = Integer.parseInt(boardsize.getText());;
我尝试弄清楚如何让它不在 main 中,但我迷路了。
我也是 java 的新手,所以整个范围 issue/global 变量问题对我来说是新的。
您问题中的代码无法编译,因为 boardsize
是方法 main
中的局部变量,因此无法从该方法外部访问。因此以下行不编译:
static final int size = Integer.parseInt(boardsize.getText());
参考 this Web page,标题为 Variables,来自 Oracle 的 Java 教程。
Internet 上的第一个 Swing 代码示例全部使用扩展 JPanel
或 JFrame
的 类。这不再需要。因此 BoardPane
不需要扩展 JPanel
.
编写任何 GUI 应用程序时都需要遵循一系列步骤 – 不仅仅是 Swing 应用程序。
首先创建应用程序 window。然后将组件添加到 window。然后编写当用户执行特定操作时执行的代码,例如当她在 JTextComponent or when she clicks on a JButton. The code that gets executed in response to a user action is referred to as an event listener.
中输入文本时
这是您的应用程序的重写。用户在 JTextField
中输入一个数字并按下 ENTER 键。这将调用方法 createBoard
。请注意,我使用了 method reference。我假设您想创建某种板,所以我创建了一个 JLabel
s.
的网格
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class BordPane {
private JFrame frame;
private void createAndDisplayGui() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createTopPanel(), BorderLayout.PAGE_START);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private void createBoard(ActionEvent event) {
Object source = event.getSource();
if (source instanceof JTextField) {
JTextField textField = (JTextField) source;
String text = textField.getText();
int dimension = Integer.parseInt(text);
JPanel board = new JPanel(new GridLayout(dimension, dimension));
for (int row = 0; row < dimension; row++) {
for (int col = 0; col < dimension; col++) {
JLabel square = new JLabel(" ");
square.setBackground(Color.white);
square.setOpaque(true);
square.setBorder(BorderFactory.createLineBorder(Color.black));
board.add(square);
}
}
frame.add(board, BorderLayout.CENTER);
frame.pack();
}
}
private JPanel createTopPanel() {
JPanel topPanel = new JPanel();
JLabel label = new JLabel("Board size:");
topPanel.add(label);
JTextField boardSize = new JTextField(6);
boardSize.addActionListener(this::createBoard);
topPanel.add(boardSize);
return topPanel;
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> new BordPane().createAndDisplayGui());
}
}
我建议您阅读 Oracle Java 教程中的整个 Creating a GUI With Swing 线索。
package SOS;
import java.awt.Graphics;
import javax.swing.*;
public class BoardPanel extends JPanel {
public static void main(String[] args) {
JFrame frame = new JFrame("SOS");
frame.setSize(600, 600);
JLabel sizelabel = new JLabel("Board size:");
frame.add(sizelabel);
sizelabel.setBounds(500, 100, 30, 30);
JTextField boardsize = new JTextField();
boardsize.setBounds(500, 100, 30, 30);
frame.add(boardsize);
String value = boardsize.getText();
BoardPanel panel = new BoardPanel();
frame.add(panel);
frame.setVisible(true);
}
private static final long serialVersionUID = 1L;
static final int size = Integer.parseInt(boardsize.getText());;
static final int cols = size;
static final int rows = size;
static final int originX = 73/size;
static final int originY = 97/size;
static final int cellSize = 300/size;
}
}
只是无法弄清楚如何将 String value = boardsize.getText();
传递给静态 final int size = Integer.parseInt(boardsize.getText());;
我尝试弄清楚如何让它不在 main 中,但我迷路了。
我也是 java 的新手,所以整个范围 issue/global 变量问题对我来说是新的。
您问题中的代码无法编译,因为 boardsize
是方法 main
中的局部变量,因此无法从该方法外部访问。因此以下行不编译:
static final int size = Integer.parseInt(boardsize.getText());
参考 this Web page,标题为 Variables,来自 Oracle 的 Java 教程。
Internet 上的第一个 Swing 代码示例全部使用扩展 JPanel
或 JFrame
的 类。这不再需要。因此 BoardPane
不需要扩展 JPanel
.
编写任何 GUI 应用程序时都需要遵循一系列步骤 – 不仅仅是 Swing 应用程序。
首先创建应用程序 window。然后将组件添加到 window。然后编写当用户执行特定操作时执行的代码,例如当她在 JTextComponent or when she clicks on a JButton. The code that gets executed in response to a user action is referred to as an event listener.
中输入文本时这是您的应用程序的重写。用户在 JTextField
中输入一个数字并按下 ENTER 键。这将调用方法 createBoard
。请注意,我使用了 method reference。我假设您想创建某种板,所以我创建了一个 JLabel
s.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class BordPane {
private JFrame frame;
private void createAndDisplayGui() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createTopPanel(), BorderLayout.PAGE_START);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private void createBoard(ActionEvent event) {
Object source = event.getSource();
if (source instanceof JTextField) {
JTextField textField = (JTextField) source;
String text = textField.getText();
int dimension = Integer.parseInt(text);
JPanel board = new JPanel(new GridLayout(dimension, dimension));
for (int row = 0; row < dimension; row++) {
for (int col = 0; col < dimension; col++) {
JLabel square = new JLabel(" ");
square.setBackground(Color.white);
square.setOpaque(true);
square.setBorder(BorderFactory.createLineBorder(Color.black));
board.add(square);
}
}
frame.add(board, BorderLayout.CENTER);
frame.pack();
}
}
private JPanel createTopPanel() {
JPanel topPanel = new JPanel();
JLabel label = new JLabel("Board size:");
topPanel.add(label);
JTextField boardSize = new JTextField(6);
boardSize.addActionListener(this::createBoard);
topPanel.add(boardSize);
return topPanel;
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> new BordPane().createAndDisplayGui());
}
}
我建议您阅读 Oracle Java 教程中的整个 Creating a GUI With Swing 线索。