如何接收从文本字段到文本区域的输入以及更多...?
How to receive input from textfield to textarea and a lot more...?
enter image description here
我怎样才能做到这一点?
1) 如果用户打开那个程序,你不必点击文本框来接收焦点,相反,如果你切换到那个程序,它会立即给你一个焦点来写而不是点击焦点。
2) 如果用户将 ID 号或项目名称写入文本字段,textarea 会响应文本字段并向用户显示该 ID 或名称,例如弹出。
3) 如果面板显示在角落里,如何缩小文本区域?我想让一个文本区域像一个盒子一样小一点,在盒子外面,它只是一个灰色。
为了全力帮助我,我很乐意给出代码。
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) {
}
}
*感谢所有帮助。一直卡在上面
- 我怀疑您想考虑使用
WindowListener
并监视 windowActivated
事件,届时您可以在 JTextField
上调用 requestFocusInWindow
来转移焦点自动给它。焦点管理有点像魔法,因为它在不同平台上的工作方式往往略有不同
- 我不太确定你的意思,但我会看看
ActionListener
支持。这将要求用户按下 "action" 键(通常是 Enter)来触发它。如果您想要实时反馈,DocumentListener
就是您要找的
- 使用
JTextArea
s constructor 指定首选的行数和列数。这将定义组件的首选可滚动大小,这将影响 JScrollPane
以及 的大小
- 将来,尝试将您的问题限制在单一的、集中的问题上,它们更容易回答并且通常会产生更多的细节
enter image description here
我怎样才能做到这一点? 1) 如果用户打开那个程序,你不必点击文本框来接收焦点,相反,如果你切换到那个程序,它会立即给你一个焦点来写而不是点击焦点。
2) 如果用户将 ID 号或项目名称写入文本字段,textarea 会响应文本字段并向用户显示该 ID 或名称,例如弹出。
3) 如果面板显示在角落里,如何缩小文本区域?我想让一个文本区域像一个盒子一样小一点,在盒子外面,它只是一个灰色。
为了全力帮助我,我很乐意给出代码。
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) {
}
}
*感谢所有帮助。一直卡在上面
- 我怀疑您想考虑使用
WindowListener
并监视windowActivated
事件,届时您可以在JTextField
上调用requestFocusInWindow
来转移焦点自动给它。焦点管理有点像魔法,因为它在不同平台上的工作方式往往略有不同 - 我不太确定你的意思,但我会看看
ActionListener
支持。这将要求用户按下 "action" 键(通常是 Enter)来触发它。如果您想要实时反馈,DocumentListener
就是您要找的 - 使用
JTextArea
s constructor 指定首选的行数和列数。这将定义组件的首选可滚动大小,这将影响JScrollPane
以及 的大小
- 将来,尝试将您的问题限制在单一的、集中的问题上,它们更容易回答并且通常会产生更多的细节