2014-09-05 4 views
-1
public class Sort_BenchMark extends JFrame { 

    private JPanel contentPane; 
    private JTextField textField; 
    private JButton btnBubbleSort; 
    private JLabel label_1; 
    private JButton btnGenerate; 
    private JButton btnSelectionSort; 
    private JLabel lblSs; 
    private JLabel lblStatus; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) 
    { 
    EventQueue.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      try 
       { 
       Sort_BenchMark frame = new Sort_BenchMark(); 
       frame.setVisible(true); 
       } 
       catch (Exception e) 
       { 
       e.printStackTrace(); 
       } 
      } 
     }); 
    } 

/** 
* Create the frame. 
*/ 
public Sort_BenchMark() 
{ 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    textField = new JTextField("Enter "); 
    textField.setForeground(Color.GRAY); 
    textField.addFocusListener(new FocusListener() { 

     @Override 
     public void focusLost(FocusEvent e) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void focusGained(FocusEvent e) { 
      textField.setText(""); 
      textField.setForeground(Color.BLACK); 
     } 
    }); 
    textField.setBounds(29, 30, 139, 20); 
    contentPane.add(textField); 
    textField.setColumns(10); 

    label_1 = new JLabel(""); 
    label_1.setBounds(334, 20, 120, 30); 
    contentPane.add(label_1); 

    btnBubbleSort = new JButton("Bubble Sort"); 

    btnBubbleSort.setBounds(204, 20, 120, 30); 
    contentPane.add(btnBubbleSort); 

    btnSelectionSort = new JButton("Selection Sort"); 
    btnSelectionSort.setBounds(204, 70, 120, 30); 
    contentPane.add(btnSelectionSort); 

    lblSs = new JLabel(""); 
    lblSs.setBounds(334, 70, 120, 30); 
    contentPane.add(lblSs); 

    lblStatus = new JLabel(""); 
    lblStatus.setBounds(75, 87, 93, 23); 
    contentPane.add(lblStatus); 

    final JRadioButton rdbtnAvgCase = new JRadioButton("Avg Case"); 
    rdbtnAvgCase.setBounds(29, 150, 109, 23); 
    contentPane.add(rdbtnAvgCase); 

    ButtonGroup b = new ButtonGroup(); 
    b.add(rdbtnAvgCase); 

    btnGenerate = new JButton("Generate"); 
    btnGenerate.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      btnBubbleSort.setEnabled(true); 
      btnSelectionSort.setEnabled(true); 
      final String s = textField.getText(); 
      if(s.contentEquals("")) 
      { 
       lblStatus.setText("Enter length"); 
      } 
      else 
      { 
       lblStatus.setText("Ready"); 
       if(rdbtnAvgCase.isSelected()) 
       { 
        btnBubbleSort.addActionListener(new ActionListener() 
        { 
         public void actionPerformed(ActionEvent e) 
         { 
          Thread t1 = new Thread(new Runnable() 
          { 
           @Override 
           public void run() 
           { 
            btnBubbleSort.setEnabled(false); 
            label_1.setText("done"); 

            btnBubbleSort.setEnabled(true); 
           } 
          }); 
          t1.start(); 
         } 
        }); 

        btnSelectionSort.addActionListener(new ActionListener() 
        { 
         public void actionPerformed(ActionEvent e) 
         { 
          Thread t3 = new Thread(new Runnable() 
          { 
           @Override 
           public void run() 
           { 
            btnSelectionSort.setEnabled(false); 
            lblSs.setText("done"); 
            btnSelectionSort.setEnabled(true); 
           } 
          }); 
          t3.start(); 
         } 
        }); 
       } 
      } 
     } 
    }); 
    btnGenerate.setBounds(64, 62, 88, 25); 
    contentPane.add(btnGenerate);  
    } 
} 

Le code ci-dessus concerne le Swing. Le code actuel est comment je conçu :-(Dans le cadre)Cliquer sur JButton (tri par bulles) efface le JTextField. Pourquoi?

  1. Sélectionnez le cas moyen (RadioButton)
  2. Entrez un numéro dans TextField (Entrée)
  3. cliquez sur générer
  4. cliquez sur n'importe quel bouton de tri (Tri de bulles et Tri de sélection)

Maintenant, quel est le problème, Si je clique sur BubbleSort, le champ de texte est effacé. Mais cela ne devrait pas arriver comme je l'ai conçu. Quelqu'un peut-il me suggérer la solution de sorte que le champ de texte ne sera pas clair après avoir entré quelque chose dedans?

+0

Il se peut que les interfaces graphiques Swing doivent fonctionner sur différentes plates-formes, en utilisant différentes PLAF, sur différentes tailles d'écran et résolutions avec des paramètres par défaut différents pour la taille de la police. En tant que tels, ils ne sont pas propices au placement exact des composants. Au lieu de cela, utilisez les gestionnaires de disposition, ou [combinaisons de gestionnaires de disposition] (http://stackoverflow.com/a/5630271/418556) ainsi que [mise en page padding et frontières] (http://stackoverflow.com/q/17874717/418556) pour les espaces blancs. –

+0

Pouvez-vous modifier le code et me donner la solution ??? –

+1

Pouvez-vous me payer? En aparté, une personne qui ne peut pas être dérangée pour épeler les 3 lettres du mot 'vous', ou qui indique une question avec '???' est peu susceptible d'obtenir de l'aide de moi. –

Répondre

0

Ces lignes ici:

@Override 
    public void focusGained(FocusEvent e) { 
     textField.setText(""); //HERE 
     textField.setForeground(Color.BLACK); 
    } 

dans le foyer code auditeur dit que lorsque vous cliquez dans le champ de texte puis définissez le texte à une chaîne vide.

+0

Mais si je clique individuellement sur le bouton selectionSort, le champ de texte ne sera pas effacé –

+0

si "btnBubbleSort.setEnabled (false);" est supprimé, le champ de texte ne sera pas effacé aussi –

0

Tout d'abord, horrible imbriqué ActionPerformed vous avez là. Cela dit, Vincent Ramdhanie a raison de dire d'où vient le problème. La raison pour laquelle cela ne se produit que lorsque vous cliquez sur un bouton est parce que lorsque vous désactivez un bouton, il ne peut pas avoir de focus, ce qui force le focus sur autre chose, ce qui dans le cas de disable-btnBubbleSort . Au lieu de btnSelectionSort.setEnabled (false) et btnSelectionSort.setEnabled (true), essayez d'utiliser setVisible (false) et setVisible (true) à la place de btnSelectionSort.setEnabled (true).

Si cela ne fonctionne pas, supprimez la onfocus-part et faites quelque chose avec un événement de clic de souris à la place.