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());;我嘗試找出如何使它不在主范圍內的方法,但我迷路了。
我也是java新手,所以整個范圍問題/全域變數問題對我來說是新的。
uj5u.com熱心網友回復:
您問題中的代碼無法編譯,因為boardsize它是方法中的區域變數,main因此無法從該方法外部訪問。因此,以下行無法編譯:
static final int size = Integer.parseInt(boardsize.getText());
請參閱Oracle 的 Java 教程中名為Variables的Web 頁面。
Internet 上的第一個Swing代碼示例都使用擴展了JPanel或的類JFrame。這不再需要。因此BoardPane不需要擴展JPanel。
在撰寫任何 GUI 應用程式(不僅僅是Swing應用程式)時,您需要遵循一系列步驟。
首先創建應用程式視窗。然后將組件添加到視窗。然后,您撰寫在用戶執行特定操作時執行的代碼,例如當她將文本輸入到JTextComponent或單擊JButton時。回應用戶操作而執行的代碼稱為事件偵聽器。
這是您的應用程式的重寫。用戶在其中輸入一個數字JTextField并按下該ENTER鍵。這將呼叫方法createBoard。請注意,我使用方法參考。我假設你想創建某種板,所以我創建了一個JLabels 網格。
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 教程中的用 Swing 創建 GUI的全部內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/441215.html
