繁体   English   中英

我正在制作Java交互式小说,但是我的JTextArea消失了

[英]I'm making a Java interactive novel, but my JTextArea Disappears

我的冒险游戏有一堆嵌套的if语句,用于根据输入输出某些内容,但是我的JTextField仅获得一个输入,然后消失。 我想让JTextField接受无限的输入,并使用.append在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的首选大小,而是让文本组件的column和row属性设置其首选大小,这将依次设置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());
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM