Je suis un novice en matière de Swing, alors il se peut que ce soit stupide.
Quoi qu'il en soit, j'ai créé une classe qui étend JFrame et un panneau contenant un JTextField, un JTextArea et un JButton.
Il s'agit d'une mise en œuvre de la console, de sorte que le champ textuel imprime les données saisies dans la zone de texte lorsque j'appuie sur la touche Entrée ou sur le bouton situé à côté.
J'ai créé le listener pour cela et tout fonctionne bien. Mon problème maintenant est de savoir comment créer une méthode qui s'attend à ce que j'appuie sur la touche Entrée du champ ? Par exemple, j'ai une méthode qui a besoin de 3 lignes de saisie. La première ligne appelle la méthode, la deuxième attend que je saisisse quelque chose et la troisième attend une autre saisie. Une fois que toutes les entrées sont terminées, j'imprime quelque chose dans le TextArea.
En pratique, la méthode devra-t-elle attendre qu'un Listener se déclenche ou quoi ? Quelqu'un peut-il m'expliquer comment cela peut fonctionner ou me donner une solution de contournement qui fonctionne ?
Gardez à l'esprit que je veux un moyen réutilisable parce que je vais probablement implémenter beaucoup de méthodes avec une entrée multi-ligne. Merci d'avance !
Mise à jour : voici ma classe qui étend JFrame - le code a été généré par netbean principalement, je vais m'assurer de travailler sur les déclarations d'importation tôt ou tard. Je n'ai pas encore implémenté de méthode car je n'ai aucune idée de comment le faire, mais attendez-vous à ce que j'ajoute un petit bout de code vérifiant si l'entrée est correcte au début (à l'intérieur de la ConsoleInputAcionPerformed) et appelle la méthode (appelons-la methodX) qui aura besoin du reste des deux lignes d'entrée. Cette classe est appelée depuis une autre classe dans mon 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]));
}
}
}