gpt4 book ai didi

java - 我正在制作一本 Java 互动小说,但我的 JTextArea 消失了

转载 作者:行者123 更新时间:2023-12-01 21:28:13 24 4
gpt4 key购买 nike

我的冒险游戏有一堆嵌套的 if 语句来根据输入输出一些内容,但我的 JTextField 只获得一个输入,然后就消失了。我想让 JTextField 接受无限的输入并使用 .append to 在 jtextarea 中显示它们。我想让程序继续接受用户输入,直到 if 语句中的故事路径结束。如果想要从 JTextField 获取输入并将输出放入 JTextArea 并将其保留在那里。

import java.awt.Dimension;
import java.awt.Font;
import java.awt.KeyboardFocusManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.util.Scanner;
import java.io.Reader;

import javax.swing.*;
import javax.swing.text.BadLocationException;

/*JakeBarcelona
*Date:May 5, 2016
*Program Name:StoryTester.java
*Description:
*/



public class StoryTester extends JFrame
{
static JTextField input = new JTextField(30);
static JTextArea fields = new JTextArea(30,50);
static Story ARoom=new Story();


public static void main(String[] args) throws BadLocationException
{
JFrame frame = new JFrame();

String story=new String();
JLabel intro = new JLabel(story);
//Sets the JLabels font and color


frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//puts a red x to close it
Story wow = new Story();
String introduction=wow.intro();
//creates array field for text editing
fields.insert(introduction, 0);

String name= fields.getText(0,30);




//creates new Panel
JPanel myPanel=new JPanel();


//creates label for text box
myPanel.setPreferredSize(new Dimension(600,600));
myPanel.add(fields);
myPanel.add(input);

//puts a scroll bar and cancel and ok button
JScrollPane scroll = new JScrollPane(fields, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
myPanel.add(scroll);
int result = JOptionPane.showConfirmDialog(null, myPanel, "Story", JOptionPane.OK_CANCEL_OPTION);

if(result==JOptionPane.OK_OPTION);
{

String jake = input.getText();

String need = ARoom.storyStatements(jake);
System.out.println(need);
fields.append(need);

}
}

}

最佳答案

您将两次字段添加到 GUI,一次添加到 myPanel,一次添加到 JScdrollPane、scrool,然后将其添加到 myPanel。不要这样做,而只需将其添加到 JScrollPane 中。您还人为地限制了 myPanel JPanel 的大小,这可能会给您带来麻烦。

而是以智能的方式使用布局,例如为 myPanel 提供一个 BorderLayout,将 JScrollPane 添加到 BorderLayout.CENTER 位置,并将输入 JTextField 添加到 BorderLayout.PAGE_END 位置。并且不要设置 myPanel 的首选大小,而是让文本组件的列和行属性设置其首选大小,这反过来又设置 myPanel JPanel 的首选大小。

此外,您不恰本地使用静态字段,事实上您当前的字段都不应该是静态的。

例如

import java.awt.BorderLayout;

import javax.swing.*;

public class LayoutEg extends JPanel {
private static final int COLS = 50;
private static final int ROWS = 30;
private JTextField input = new JTextField(COLS);
private JTextArea fields = new JTextArea(ROWS, COLS);

public LayoutEg() {
// two methods below so that words wrap
fields.setWrapStyleWord(true);
fields.setLineWrap(true);
fields.setFocusable(false); // so we can't write directly into JTextArea
JScrollPane scrollPane = new JScrollPane(fields);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
setLayout(new BorderLayout(2, 2));
add(scrollPane, BorderLayout.CENTER);
add(input, BorderLayout.PAGE_END);
}

private static void createAndShowGui() {
LayoutEg mainPanel = new LayoutEg();

JFrame frame = new JFrame("Story GUI");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}

关于java - 我正在制作一本 Java 互动小说,但我的 JTextArea 消失了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37775385/

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