gpt4 book ai didi

java - 在 JPanel 中显示多个 JTextField 和 JLabels 时遇到困难

转载 作者:行者123 更新时间:2023-12-02 06:24:15 25 4
gpt4 key购买 nike

我在 JPanel 中为我正在制作的刽子手游戏创建多个 JTextFields 和 JLabels 时遇到困难。我试图在 JLabel 中将用户输入显示为“使用的字母”。我已经评论了下面未显示的区域。提前致谢。

/*PACKAGE DECLARATION*/
package Game;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


/************************
* GAME MECHANICS CLASS *
* **********************/
public class GameMechanics {


/* STATIC DECLARATIONS */
static JPanel jp;//panel
static JLabel jl;//label
static JTextField tf;//text field
static String input = "";


/*********************
* USER INPUT METHOD *
* *******************/
public void userInput() {

jp = new JPanel();
jp.setLayout(new BoxLayout(jp, BoxLayout.Y_AXIS));
jl = new JLabel("Enter a Letter");//prompt with label
tf = new JTextField(null);//length of text field by character
jp.add(jl);//add label to panel
jp.add(tf);//add text field to panel


tf.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {

JTextField tf = (JTextField)e.getSource();
input = tf.getText();//get user input
JLabel jl2 = new JLabel("Letters Used: " + input);//NOT DISPLAYING
jp.add(jl2);//NOT DISPLAYING

}//end actionPerformed method

});

}//end userInput method


/*****************
* WINDOW METHOD *
* ***************/
public void window() {

LoadImageApp i = new LoadImageApp();//calling image class
JFrame gameFrame = new JFrame();//declaration
gameFrame.add(i); //adds background image to window
i.add(jp); // adds panel containing label to background image panel
gameFrame.setTitle("Hangman");//title of frame window
gameFrame.setSize(850, 600);//sets size of frame
gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//exit when 'x' button pressed
gameFrame.setIconImage(new ImageIcon("Hangman-Game-grey.png").getImage());//set the frame icon to an image loaded from a file
gameFrame.setLocationRelativeTo(null);//window centered
gameFrame.setResizable(false);//user can not resize window
gameFrame.setVisible(true);//display frame

}//end window method

}//end GameMechanics class








/*PACKAGE DECLARATION*/
package Game;


/***********************
* IMPORT DECLARATIONS *
* *********************/
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JPanel;


/***************
* IMAGE CLASS *
* *************/
public class LoadImageApp extends JPanel {

private static final long serialVersionUID = 1L;

private ImageIcon image;


/***********************
* PAINT IMAGE METHOD *
* *********************/
public void paintComponent (Graphics g) {

super.paintComponent(g);
image = new ImageIcon("hangman.png");//image name & type
image.paintIcon(this, g, 0, 9);

}//end paintComponent method

}//end LoadImageApp class










/*PACKAGE DECLARATION*/
package Game;


/*******************
* GAME MAIN CLASS *
* *****************/
public class GameMain {


/***************
* MAIN METHOD *
* *************/
public static void main (String []args) {

GameMechanics game = new GameMechanics();//declaration
game.userInput();//userInput call
game.window();

}//end main method

}//end GameMain class

最佳答案

这段代码有很多地方无法工作,而且有很多地方令人困惑。

直接的问题是面板 jp 是在 userInput() 中创建的,并且在那里添加了一些东西,但它本身并没有添加到框架或窗口或任何东西中。所以它不会显示。

我建议将所有 UI“设置”代码放在一个位置 - 在用户输入任何内容之前设置整个窗口,使用空标签或文本字段或其他内容。这样,用户就不会看到 UI 控件“弹出”,这会令人不安,因为 GUI 很少以这种方式工作。

还可以更轻松地确保包含控件的面板均已创建,布局管理器均已设置,控件已创建并使用正确的布局管理器放置在正确的面板中,等等.,在开始进入事件驱动逻辑之前。

还有一点要注意——对 Swing UI 所做的任何更改都需要在“事件调度线程”上进行,如果您不知道那是什么,则需要阅读一两篇教程,直到弄清楚为止。

<小时/>

按照代码顺序:我发现最好创建一个容器面板,设置其布局管理器,然后创建直接进入该面板的项目并添加它们。由于嵌套面板很常见,因此可以有多层。

我可能会将您将要拥有的控件放在一个面板的顶部,并将该面板设置为框架上边框布局的“北”部分。然后我会为该边框布局的中心创建另一个面板,并将我想要的任何内容放在框架的可拉伸(stretch)部分中。因此:创建框架,设置边框布局(尽管实际上这是默认的),创建上部面板,设置布局,创建上部控件并添加它们,将该面板添加到北部的框架,等等。

我发现最好创建并添加一个操作例程以及该控件的其他特征(标签、颜色等)。事件驱动代码的挑战之一是,当您编写类似操作例程之类的内容时,必须记住代码是在应用程序激活时的状态上下文中执行的;特别是对于匿名内部类,它需要您进行一些上下文转换。但对我来说最合乎逻辑的事情是用控件创建它。

我不确定您还需要什么订单方面的帮助。祝你好运。

关于java - 在 JPanel 中显示多个 JTextField 和 JLabels 时遇到困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20714331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com