我是 Swing 的新手,所以这可能很愚蠢。
无论如何,我创建了一个扩展 JFrame 的类,并且在面板内包含一个 JTextField、一个 JTextArea 和一个 JButton。
这应该是一个控制台实现,因此当我按下 Enter 或旁边的按钮时,TextField 会将输入打印到 TextArea。
我已经为此制作了听众,一切正常。我现在的问题是如何制作一个希望我在字段上按 Enter 的方法?例如,我有一个需要 3 行输入的方法。第一行调用方法,第二行期望我输入一些东西,第三行期望更多输入。完成所有输入后,我将一些内容打印到 TextArea。
那么实际上该方法必须等待侦听器触发还是什么?有人可以解释一下这个东西是如何工作的,或者给我一个解决方法吗?
请记住,我想要一些可重用的方式,因为我可能会使用多行输入实现很多方法。提前致谢!
更新:这是我扩展 JFrame 的类 - 代码主要是 netbean 生成的,我将确保迟早处理导入语句。我还没有实现一个方法,因为我不知道怎么做,但是希望我添加一小段代码检查输入是否正确(在 ConsoleInputAcionPerformed 内部)并调用该方法(我们称之为 methodX ) 这将需要两条输入线的其余部分。这个类是从我的 main() 中的另一个类调用的。
public class MainWindow extends javax.swing.JFrame {
private javax.swing.JButton EnterButton;
private javax.swing.JPanel ConsolePanel;
private javax.swing.JScrollPane ConsoleScroll;
private javax.swing.JTextArea ConsoleOutput;
private javax.swing.JTextField ConsoleInput;
public MainWindow() {
initComponents();
}
private void initComponents() {
ConsolePanel = new javax.swing.JPanel();
ConsoleScroll = new javax.swing.JScrollPane();
ConsoleOutput = new javax.swing.JTextArea();
ConsoleInput = new javax.swing.JTextField();
EnterButton = new javax.swing.JButton();
setTitle("Graphical Super Console v.1.0");
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
setPreferredSize(new java.awt.Dimension(800, 600));
ConsoleOutput.setColumns(20);
ConsoleOutput.setRows(5);
ConsoleOutput.setLineWrap(true);
ConsoleOutput.setEditable(false);
ConsoleOutput.setFont(new java.awt.Font("Consolas", 1, 14));
ConsoleScroll.setViewportView(ConsoleOutput);
ConsoleScroll.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
ConsoleInput.setText("");
ConsoleInput.requestFocusInWindow();
ConsoleInput.setFont(new java.awt.Font("Consolas", 1, 14));
ConsoleInput.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ConsoleInputActionPerformed(evt);
}
});
EnterButton.setText(">>");
EnterButton.setFont(new java.awt.Font("Consolas", 1, 14));
EnterButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ConsoleInputActionPerformed(evt);
}
});
javax.swing.GroupLayout ConsolePanelLayout = new javax.swing.GroupLayout(ConsolePanel);
ConsolePanel.setLayout(ConsolePanelLayout);
ConsolePanelLayout.setHorizontalGroup(
ConsolePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ConsolePanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(ConsolePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(ConsoleScroll)
.addGroup(ConsolePanelLayout.createSequentialGroup()
.addComponent(ConsoleInput, javax.swing.GroupLayout.DEFAULT_SIZE, 679, Short.MAX_VALUE)
.addGap(18, 18, 18)
.addComponent(EnterButton)))
.addContainerGap())
);
ConsolePanelLayout.setVerticalGroup(
ConsolePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ConsolePanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(ConsoleScroll, javax.swing.GroupLayout.DEFAULT_SIZE, 536, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(ConsolePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(EnterButton)
.addComponent(ConsoleInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(ConsolePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(ConsolePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
setVisible(true);
ConsoleInput.requestFocus();
}
private void ConsoleInputActionPerformed(java.awt.event.ActionEvent evt) {
printf(">"+ConsoleInput.getText()+"\n");
ConsoleInput.setText("");
}
public javax.swing.JTextArea getConsoleOutput(){
return ConsoleOutput;
}
public javax.swing.JTextField getConsoleInput(){
return ConsoleInput;
}
public void printf(Object... obj){
for(int i=0; i<obj.length; i++){
ConsoleOutput.append(String.valueOf(obj[i]));
}
}
}