所以我试着制作一个面板,玩家在其中配置本地棋盘游戏中玩家的名字。我希望他们能够添加2到6之间的球员,所以默认情况下,我已经使面板显示2 JTextField
在第二个框下有一个“+”按钮,可以添加一个额外的玩家。但我不知道如何做,以及如何执行这样的行动,当用户按下“+”按钮一个新的 JTextField
弹出窗口供玩家添加新的玩家名称。
我提供的代码,我用这个特定的面板,但它是必要的,我可以提供我的窗口的整个代码。如有任何帮助,我们将不胜感激。
private void setLocalPanel() {
GridBagConstraints c = new GridBagConstraints();
// localButtonsPanel config
localButtonsPanel = new JPanel(new GridLayout(0, 1, 0, 10));
localButtonsPanel.setOpaque(false);
// nameBox1 config
nameBox1 = new JTextField("Player name");
nameBox1.setBackground(new Color(255, 255, 255));
nameBox1.setEditable(true);
c.ipady = 10;
localButtonsPanel.add(nameBox1, c);
// nameBox2 config
nameBox2 = new JTextField("Player name");
nameBox2.setBackground(new Color(255, 255, 255));
nameBox2.setEditable(true);
localButtonsPanel.add(nameBox2, c);
// + config
extraBtn = new JButton("+");
extraBtn.setForeground(new Color(255, 255, 255));
extraBtn.setFont(new Font("Segoe Script", Font.BOLD,40));
extraBtn.setOpaque(false);
extraBtn.setContentAreaFilled(false);
extraBtn.setBorderPainted(false);
extraBtn.setFocusPainted(false);
localButtonsPanel.add(extraBtn, new GridBagConstraints());
c.gridy = 0;
localPanel.add(localButtonsPanel, c);
// startBtn config
startBtn = new JButton("Start");
startBtn.setForeground(new Color(255, 255, 255));
startBtn.setFont(new Font("Segoe Script", Font.BOLD,40));
startBtn.setOpaque(false);
startBtn.setContentAreaFilled(false);
startBtn.setBorderPainted(false);
startBtn.setFocusPainted(false);
c.gridy = 1;
localPanel.add(startBtn, c);
// localBackBtn config
localBackBtn = new JButton("Back");
localBackBtn.setForeground(new Color(255, 255, 255));
localBackBtn.setFont(new Font("Segoe Script", Font.BOLD,40));
localBackBtn.setOpaque(false);
localBackBtn.setContentAreaFilled(false);
localBackBtn.setBorderPainted(false);
localBackBtn.setFocusPainted(false);
c.gridy = 2;
localPanel.add(localBackBtn, c);
setLocalActions();
}
private void setLocalActions() {
// startBtn config
startBtn.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
startBtn.setForeground(new Color(200, 210, 10));
startBtn.setText("> Start <");
}
public void mouseExited(MouseEvent e) {
startBtn.setForeground(new Color(255, 255, 255));
startBtn.setText("Start");
}
public void mouseClicked(MouseEvent e) {
// nameBox1.getText()
// nameBox2.getText()
localPanel.setVisible(false);
gamePanel.setVisible(true);
}
});
// localBackBtn config
localBackBtn.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
localBackBtn.setForeground(new Color(200, 210, 10));
localBackBtn.setText("> Back <");
}
public void mouseExited(MouseEvent e) {
localBackBtn.setForeground(new Color(255, 255, 255));
localBackBtn.setText("Back");
}
public void mouseClicked(MouseEvent e) {
localPanel.setVisible(false);
playPanel.setVisible(true);
}
});
}
附言 localPanel
有一个 GridBagLayout
.
1条答案
按热度按时间afdcj2ne1#
你需要添加一个
ActionListener
到JButton
而不是一个MouseListener
. 请参阅如何使用按钮。当
+
按钮,您想添加一个新的JTextField
到JPanel
包含允许用户输入玩家姓名的字段。下面是根据您的问题中的代码改编的代码,它添加了
JTextField
当用户单击+
按钮。关于代码的注解出现在代码后面。注意当你打电话的时候
setContentAreaFilled(false)
在JButton
,不需要也打电话setOpaque(false)
.而不是
new java.awt.Color(255, 255, 255)
你可以用常数WHITE
在课堂上java.awt.Color
.GridLayout
以及GridBagLayout
都不一样。参见在容器内布置部件我没有像您那样使用背景图像,而是将背景颜色设置为深灰色。