2014-09-05 1 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);  
    } 
} 

위 코드는 Swing에 관한 것입니다. 내가 디자인하는 방법을 실제 코드는 프레임에서 :-()에 JButton (Bubble Sort)을 클릭하면 JTextField가 지워집니다. 왜?

  • 클릭을 생성에

    1. 는 평균 케이스 (의 RadioButton) 텍스트 필드에 (입력
    2. 어떤 번호를 입력)
    3. 클릭을 선택하다 모든 정렬 버튼 (버블 정렬 및 선택 정렬)

    이제 문제는 무엇입니까? BubbleSort를 클릭하면 텍스트 필드가 지워집니다. 그러나 내가 설계 한대로 그렇게해서는 안됩니다. 아무도 나에게 솔루션을 제안 할 수 있도록 텍스트 필드에 아무것도 입력 한 후 명확 해지지 않을까? 여기

  • +0

    스윙 GUI는 다른 플랫폼에서 다른 PLAF를 사용하여 다른 화면 크기와 글꼴 크기에 대한 기본 설정이 다른 해상도에서 작동해야 할 수 있습니다. 따라서 구성 요소의 정확한 배치에 도움이되지 않습니다. 대신 레이아웃 관리자 또는 [레이아웃 관리자 조합] (http://stackoverflow.com/a/5630271/418556) 및 [레이아웃 패딩 및 테두리] (http://stackoverflow.com/q/17874717/418556)을 사용하십시오.). –

    +0

    코드를 변경하고 해결책을 줄 수 있습니까 ??? –

    +1

    당신은 저에게 돈을 지불 할 수 있습니까? 제쳐두고, '너'라는 단어의 세 글자를 모두 철자로 쓰거나, '???' 나에게서 도움을받을 것 같지 않다. –

    답변

    0

    이 라인 : 포커스 청취자 코드

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

    당신이 텍스트 필드에 클릭하면 다음 빈 문자열의 텍스트를 설정하는 것이 말했다.

    +0

    하지만 개별적으로 selectSort 버튼을 클릭하면 텍스트 필드가 지워지지 않습니다 –

    +0

    "btnBubbleSort.setEnabled (false);" 텍스트 필드는 삭제되지 않습니다. –

    0

    첫째, 끔찍한 중첩 된 ActionPerformed 거기에있어.

    그건 그렇고, Vincent Ramdhanie는 문제가 발생한 곳입니다. 특정 버튼을 클릭 할 때만 발생하는 이유는 버튼을 비활성화하면 포커스를 가질 수 없기 때문입니다. 포커스를 비활성화하면 다른 곳에 포커스가 설정되므로 disable-btnBubbleSort의 경우 텍스트 필드 인 것처럼 보입니다 .

    btnSelectionSort.setEnabled (false) 및 btnSelectionSort.setEnabled (true) 대신 setVisible (false) 및 setVisible (true)을 사용해보십시오.

    그래도 문제가 해결되지 않으면 onfocus 부분을 삭제하고 대신 마우스 클릭 이벤트로 작업하십시오.