Je travaille sur un cadre de connexion où je récupère et remplit JComboBox avec des bases de données créées par l'utilisateur, puis je règle le texte de JLabel sur la base de Item sélectionné de JComboBox. Je veux retarder l'exécution et afficher le texte 'Connexion ...' dans JLabel lorsque l'utilisateur sélectionne un élément de JComboBox mais quand je sélectionne un élément, l'interface se fige et après 5 secondes il affiche 'Connecté' Il ignore le 'Connexion. .. 'JLabel.GUI geler lorsque JCombobox sélectionné, Comment utiliser Timer dans l'application Swing avec condition Statement dans actionListener?
Un grand merci à l'avance.
package com.softoak.dba;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import javax.swing.JComboBox;
public class Login{
private JFrame frame;
static ArrayList<String> dbcom = new ArrayList<String>();
static String[] usecom;
JLabel status = new JLabel("•");
JLabel lblNotConnected;
/**
* Launch the application.
*/
public static void main(String[] args) throws Exception{
Connection m_Connection = DriverManager.getConnection("jdbc:sqlserver://localhost;integratedSecurity=true");
String dbs = "SELECT * FROM sys.databases WHERE owner_sid != 1";
Statement st = m_Connection.createStatement();
ResultSet m_ResultSet = st.executeQuery(dbs);
dbcom.add("-None-");
while(m_ResultSet.next()){
dbcom.add(m_ResultSet.getString(1));
}
usecom = new String[dbcom.size()];
usecom = dbcom.toArray(usecom);
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Login window = new Login();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Login() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
status.setBounds(385, 235, 10, 10);
status.setForeground(Color.red);
frame.getContentPane().add(status);
JLabel lblLoginApplication = new JLabel("Login Application");
lblLoginApplication.setFont(new Font("Lucida Calligraphy", Font.BOLD, 20));
lblLoginApplication.setBounds(120, 25, 220, 30);
frame.getContentPane().add(lblLoginApplication);
JComboBox comboBox = new JComboBox(usecom);
comboBox.setBounds(230, 80, 110, 30);
comboBox.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if (comboBox.getSelectedIndex() == 1 || comboBox.getSelectedIndex() == 2) {
lblNotConnected.setText("Connecting...");
try{
Thread.sleep(5000);
}catch(InterruptedException ex){
JOptionPane.showMessageDialog(null,ex.getMessage());
}
status.setForeground(Color.green);
lblNotConnected.setText("Connected");
JOptionPane.showMessageDialog(null, "Connected");
}
else{
status.setForeground(Color.red);
lblNotConnected.setText("Not Connected");
}
}
});
frame.getContentPane().add(comboBox);
JLabel lblSelectDatabase = new JLabel("Select Database");
lblSelectDatabase.setFont(new Font("Microsoft Sans Serif", Font.BOLD, 14));
lblSelectDatabase.setBounds(91, 79, 129, 30);
frame.getContentPane().add(lblSelectDatabase);
lblNotConnected = new JLabel("Not Connected");
lblNotConnected.setFont(new Font("Elephant", Font.PLAIN, 12));
lblNotConnected.setBounds(280, 230, 110, 20);
frame.getContentPane().add(lblNotConnected);
}
}
Merci. Je voulais juste que le delay s'amuse, sinon il fonctionne parfaitement bien. En outre, je ne pouvais pas comprendre le terme EDT (Event Dispatch Thread) car je suis un débutant en GUI. –
Quelqu'un peut-il s'il vous plaît fournir le bon code de le faire correctement. –
Je vous ai déjà donné deux possibilités. C'est à ça que servent les liens du tutoriel. Ils fournissent le code pour le faire correctement. Lisez le tutoriel. téléchargez les exemples et jouez avec eux. Nous ne sommes pas ici pour écrire le code pour vous. – camickr