【问题标题】:How to receive input from textfield to textarea and a lot more...?如何接收从文本字段到文本区域的输入等等......?
【发布时间】:2018-03-05 02:52:56
【问题描述】:

enter image description here

我怎样才能做到这一点? 1)如果用户打开该程序,您不必单击文本字段来获得焦点,相反,如果您切换到该程序,它会立即为您提供一个焦点来编写而不是单击焦点。

2) 如果用户将 ID 号或项目名称写入文本字段,则 textarea 会响应文本字段并向用户显示该 ID 或名称,例如弹出。

3) 如何使文本区域更小,以防即使面板显示在角落里?我想让 textarea 像盒子一样小一点,在盒子外面,它只是一种灰色。

为了全面帮助我,我很乐意提供代码。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;

public abstract class Itemlist extends JFrame implements ActionListener, FocusListener {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;


    public static void main(String args[]) {
        // create JFrame
        JFrame frame = new JFrame("small project");
        frame.setDefaultCloseOperation(2);
        frame.setPreferredSize(new Dimension(400, 600));
        frame.setLayout(new BorderLayout());
        frame.setResizable(false);


        JPanel panel = new JPanel(new FlowLayout(SwingConstants.LEADING, 10, 10));
        frame.add(panel);
        panel.setPreferredSize(new Dimension(100, 50));

        JTextField tf = new JTextField(25);
        tf.setPreferredSize(new Dimension(100, 35));
        Font f = new Font("Times New Roman", Font.BOLD, 18);
        tf.setFont(f);
        panel.add(tf);
        frame.add(tf, BorderLayout.PAGE_END);

        tf.addFocusListener(new FocusListener() {

            @Override
            public void focusGained(FocusEvent e) {
                tf.getText();

            }

            @Override
            public void focusLost(FocusEvent e) {
                tf.setText("");

            }

        });

        JTextArea ta = new JTextArea();
        frame.add(ta);
        Font font = new Font("Times New Roman", Font.PLAIN, 16);
        ta.setEditable(false);
        ta.setFont(font);

        JScrollPane scrollPane = new JScrollPane(ta);
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        frame.add(scrollPane);

        BufferedReader br;
        String contents;

        try {
            br = new BufferedReader(new FileReader("C:/ItemList.txt"));
            contents = br.readLine();

            while ((contents = br.readLine()) != null) {


                ta.read(br, null);
            }
            br.close();
        } catch (IOException e) {

        }


        frame.pack();
        // frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }

    @Override
    public void actionPerformed(ActionEvent arg0) {

    }
}

*感谢所有帮助。一直卡在上面。

【问题讨论】:

    标签: java swing jframe jtextfield jtextarea


    【解决方案1】:
    1. 我怀疑您想考虑使用WindowListener 并监视windowActivated 事件,此时您可以在JTextField 上调用requestFocusInWindow 以自动将焦点转移到它。焦点管理有点像魔法,因为它在不同平台上的工作方式往往略有不同
    2. 我不完全确定您的意思,但我会查看ActionListener 支持。这将需要用户点击“action”键(通常是Enter)来触发它。如果您需要实时反馈,DocumentListener 将是您正在寻找的内容
    3. 使用JTextAreas constructor 指定首选的行数和列数。这将定义组件的首选可滚动大小,这也会影响JScrollPane 的大小
    4. 以后,请尝试将您的问题限制为单一的、重点突出的问题,它们更容易回答,并且通常会产生更多细节

    【讨论】:

      猜你喜欢
      • 2013-07-04
      • 1970-01-01
      • 2015-07-24
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多