使用 getActionCommand String 将字符串子字符串化为行和列
Using getActionCommand String to substring into a row and column
我正在执行一项任务,我使用 Java 创建一个 GUI。目前,我正在为扫雷制作布局 - 但我对这种方法的说明有点困惑。
说明如下:
mousePressed 方法
- getActionCommand 获取字符串
- 使用 getComponent 并将其转换为按钮
- 将 actionCommand 字符串分成一行和一列
- 设置行列的按钮文字为“!”
这就是我想要的mousePressed()
public void mousePressed(MouseEvent b)
{
Component a = b.getComponent();
JButton x = (JButton)a;
System.out.println(x.getActionCommand());
String s = x.getActionCommand();
// substring for row and col
// set text
}
最后两个怎么办?特别是
break the actionCommand String into a row and column
set the button text of the row and column to "!"
有了子字符串,我该如何将 actionCommand 字符串“分解”成一行和一列? (休息不是字面上的意思)。带有开始索引和结束索引的字符串的子字符串 returns 部分,但是我将使用来自 actionCommand 的哪个字符串作为子字符串?我将如何设置行和列以将文本显示为“!”?我是否也需要为此使用子字符串?
这是我到目前为止的布局的全部代码。
import java.awt.GridLayout;
import java.awt.Component;
import java.awt.Label;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class GridOfButtons extends JFrame implements MouseListener
{
private JButton [][] grid;
public GridOfButtons()
{
grid = new JButton[10][10];
BuildGUI();
}
public void BuildGUI()
{
setSize(1200, 800);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(10, 10));
setVisible(true);
for(int r = 0; r < grid.length; r++)
{
for(int c = 0; c < grid[r].length; c++)
{
grid[r][c] = new JButton("*");
grid[r][c].setActionCommand(r + ":" + c);
addMouseListener(this);
getContentPane().add(grid[r][c]);
}
}
}
public void mouseClicked(MouseEvent b)
{
}
public void mouseEntered(MouseEvent b)
{
}
public void mouseExited(MouseEvent b)
{
}
public void mouseReleased(MouseEvent b)
{
}
public void mousePressed(MouseEvent b)
{
Component a = b.getComponent();
JButton x = (JButton)a;
System.out.println(x.getActionCommand());
String s = x.getActionCommand();
// substring for row and col
// set text
}
public static void main(String[] args)
{
new GridOfButtons();
}
}
这些也是我遵循的说明:
创建一个 class,它是使用接口 MouseListener 的 JFrame 的子class:
实例变量:
- JButton 的二维数组
默认构造函数:
- 将数组的大小设置为 10 x 10
- 调用构建 GUI 的方法
GUI 生成器方法:
- 设置默认关闭
- 将布局设置为 GridLayout
- 使用嵌套 for 循环创建初始文本为“*”的按钮
- 使用setActionCommand添加行+“:”+列
- 添加鼠标侦听器
- 将按钮添加到 JFrame
鼠标按下方法:
- getActionCommand 获取字符串
- 使用 getComponent 并将其转换为按钮
- 将 actionCommand 字符串分成一行和一列
- 设置行列的按钮文字为“!”
我不能严格遵守文本(我正在添加说明中未阐明的其他代码行),但我也不能做任何太高级的事情,因为我在限制条件下工作.
我知道,对于作业,您通常只能使用到目前为止所学的东西。因此,我了解到您只能使用方法 substring
(属于 class java.lang.String
)来操作每个 JButton
的文本。 (我希望你也可以使用方法 indexOf
因为我在下面的代码中使用了它。)
除了更改 JButton
文本的 [缺失] 代码外,您的代码还有两个问题。
- 调用方法
setVisible
应该是您的 BuildGUI
方法的最后一行。
- 您正在向
JFrame
添加 MouseListener
,即 class GridOfButtons
。您需要为每个 JButton
添加一个 MouseListener
。
这是您更正的代码,包括更改 JButton
文本的代码。如上所述,我移动了行 setVisible(true);
。我还为每个 JButton
添加了一个 MouseListener
。 (请参阅下面代码中的评论 CHANGE HERE。)我添加了代码以更改方法 mousePressed
.
中的 JButton
文本
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class GridOfButtons extends JFrame implements MouseListener {
private JButton [][] grid;
public GridOfButtons()
{
grid = new JButton[10][10];
BuildGUI();
}
public void BuildGUI()
{
setSize(1200, 800);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(10, 10));
for(int r = 0; r < grid.length; r++)
{
for(int c = 0; c < grid[r].length; c++)
{
grid[r][c] = new JButton("*");
grid[r][c].setActionCommand(r + ":" + c);
grid[r][c].addMouseListener(this); // CHANGE HERE
getContentPane().add(grid[r][c]);
}
}
setVisible(true);
}
public void mouseClicked(MouseEvent b)
{
}
public void mouseEntered(MouseEvent b)
{
}
public void mouseExited(MouseEvent b)
{
}
public void mouseReleased(MouseEvent b)
{
}
public void mousePressed(MouseEvent b)
{
Component a = b.getComponent();
JButton x = (JButton)a;
System.out.println(x.getActionCommand());
String s = x.getActionCommand();
// substring for row and col
// set text
int ndx = s.indexOf(':');
if (ndx >= 0) {
String row = s.substring(0, ndx);
String col = s.substring(ndx + 1);
String text = row + '!' + col;
x.setText(text);
}
}
public static void main(String[] args)
{
new GridOfButtons();
}
}
关于上述代码的一些注释。
- 建议使用Java naming conventions,也就是说方法
BuildGui
应该命名为buildGui
.
- 通常最好在
GridLayout
构造函数中将其中一个维度设置为 0(零)。参考How to Use GridLayout.
- 大多数“侦听器”接口都有相应的“适配器”class 来实现该接口。对于
MouseListener
有 class MouseAdapter
。这使您不必为侦听器接口中的每个方法编写实现。参考How to Write a Mouse Listener.
- 通常您会将
ActionListener
添加到 JButton
,而不是 MouseListener
。参考How to Use Buttons, Check Boxes, and Radio Buttons。但我假设你的教授有设定作业要求的理由。
这是单击网格第一行第一列中的 JButton
后 运行 应用程序的屏幕截图。
我正在执行一项任务,我使用 Java 创建一个 GUI。目前,我正在为扫雷制作布局 - 但我对这种方法的说明有点困惑。
说明如下:
mousePressed 方法
- getActionCommand 获取字符串
- 使用 getComponent 并将其转换为按钮
- 将 actionCommand 字符串分成一行和一列
- 设置行列的按钮文字为“!”
这就是我想要的mousePressed()
public void mousePressed(MouseEvent b)
{
Component a = b.getComponent();
JButton x = (JButton)a;
System.out.println(x.getActionCommand());
String s = x.getActionCommand();
// substring for row and col
// set text
}
最后两个怎么办?特别是
break the actionCommand String into a row and column
set the button text of the row and column to "!"
有了子字符串,我该如何将 actionCommand 字符串“分解”成一行和一列? (休息不是字面上的意思)。带有开始索引和结束索引的字符串的子字符串 returns 部分,但是我将使用来自 actionCommand 的哪个字符串作为子字符串?我将如何设置行和列以将文本显示为“!”?我是否也需要为此使用子字符串?
这是我到目前为止的布局的全部代码。
import java.awt.GridLayout;
import java.awt.Component;
import java.awt.Label;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class GridOfButtons extends JFrame implements MouseListener
{
private JButton [][] grid;
public GridOfButtons()
{
grid = new JButton[10][10];
BuildGUI();
}
public void BuildGUI()
{
setSize(1200, 800);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(10, 10));
setVisible(true);
for(int r = 0; r < grid.length; r++)
{
for(int c = 0; c < grid[r].length; c++)
{
grid[r][c] = new JButton("*");
grid[r][c].setActionCommand(r + ":" + c);
addMouseListener(this);
getContentPane().add(grid[r][c]);
}
}
}
public void mouseClicked(MouseEvent b)
{
}
public void mouseEntered(MouseEvent b)
{
}
public void mouseExited(MouseEvent b)
{
}
public void mouseReleased(MouseEvent b)
{
}
public void mousePressed(MouseEvent b)
{
Component a = b.getComponent();
JButton x = (JButton)a;
System.out.println(x.getActionCommand());
String s = x.getActionCommand();
// substring for row and col
// set text
}
public static void main(String[] args)
{
new GridOfButtons();
}
}
这些也是我遵循的说明:
创建一个 class,它是使用接口 MouseListener 的 JFrame 的子class:
实例变量:
- JButton 的二维数组
默认构造函数:
- 将数组的大小设置为 10 x 10
- 调用构建 GUI 的方法
GUI 生成器方法:
- 设置默认关闭
- 将布局设置为 GridLayout
- 使用嵌套 for 循环创建初始文本为“*”的按钮
- 使用setActionCommand添加行+“:”+列
- 添加鼠标侦听器
- 将按钮添加到 JFrame
鼠标按下方法:
- getActionCommand 获取字符串
- 使用 getComponent 并将其转换为按钮
- 将 actionCommand 字符串分成一行和一列
- 设置行列的按钮文字为“!”
我不能严格遵守文本(我正在添加说明中未阐明的其他代码行),但我也不能做任何太高级的事情,因为我在限制条件下工作.
我知道,对于作业,您通常只能使用到目前为止所学的东西。因此,我了解到您只能使用方法 substring
(属于 class java.lang.String
)来操作每个 JButton
的文本。 (我希望你也可以使用方法 indexOf
因为我在下面的代码中使用了它。)
除了更改 JButton
文本的 [缺失] 代码外,您的代码还有两个问题。
- 调用方法
setVisible
应该是您的BuildGUI
方法的最后一行。 - 您正在向
JFrame
添加MouseListener
,即 classGridOfButtons
。您需要为每个JButton
添加一个MouseListener
。
这是您更正的代码,包括更改 JButton
文本的代码。如上所述,我移动了行 setVisible(true);
。我还为每个 JButton
添加了一个 MouseListener
。 (请参阅下面代码中的评论 CHANGE HERE。)我添加了代码以更改方法 mousePressed
.
JButton
文本
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class GridOfButtons extends JFrame implements MouseListener {
private JButton [][] grid;
public GridOfButtons()
{
grid = new JButton[10][10];
BuildGUI();
}
public void BuildGUI()
{
setSize(1200, 800);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(10, 10));
for(int r = 0; r < grid.length; r++)
{
for(int c = 0; c < grid[r].length; c++)
{
grid[r][c] = new JButton("*");
grid[r][c].setActionCommand(r + ":" + c);
grid[r][c].addMouseListener(this); // CHANGE HERE
getContentPane().add(grid[r][c]);
}
}
setVisible(true);
}
public void mouseClicked(MouseEvent b)
{
}
public void mouseEntered(MouseEvent b)
{
}
public void mouseExited(MouseEvent b)
{
}
public void mouseReleased(MouseEvent b)
{
}
public void mousePressed(MouseEvent b)
{
Component a = b.getComponent();
JButton x = (JButton)a;
System.out.println(x.getActionCommand());
String s = x.getActionCommand();
// substring for row and col
// set text
int ndx = s.indexOf(':');
if (ndx >= 0) {
String row = s.substring(0, ndx);
String col = s.substring(ndx + 1);
String text = row + '!' + col;
x.setText(text);
}
}
public static void main(String[] args)
{
new GridOfButtons();
}
}
关于上述代码的一些注释。
- 建议使用Java naming conventions,也就是说方法
BuildGui
应该命名为buildGui
. - 通常最好在
GridLayout
构造函数中将其中一个维度设置为 0(零)。参考How to Use GridLayout. - 大多数“侦听器”接口都有相应的“适配器”class 来实现该接口。对于
MouseListener
有 classMouseAdapter
。这使您不必为侦听器接口中的每个方法编写实现。参考How to Write a Mouse Listener. - 通常您会将
ActionListener
添加到JButton
,而不是MouseListener
。参考How to Use Buttons, Check Boxes, and Radio Buttons。但我假设你的教授有设定作业要求的理由。
这是单击网格第一行第一列中的 JButton
后 运行 应用程序的屏幕截图。