【问题标题】:Clicking on JButton(Bubble Sort) clears the JTextField.Why?单击 JButton(Bubble Sort) 会清除 JTextField。为什么?
【发布时间】:2014-09-05 16:55:58
【问题描述】:
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 的。 我设计的实际代码是:-(在框架中)

  1. 选择平均情况(单选按钮)
  2. 在文本字段中输入任意数字 (Enter)
  3. 点击生成
  4. 点击任意排序按钮(冒泡排序和选择排序)

现在,问题是什么,如果我点击 BubbleSort,文本字段会被清除。但它不应该按照我的设计发生。任何人都可以建议我解决方案,以便在输入任何内容后文本字段不会变得清晰吗?

【问题讨论】:

  • Swing GUI 可能必须在不同的平台上工作,使用不同的 PLAF,在不同的屏幕尺寸和分辨率上使用不同的字体大小默认设置。因此,它们不利于组件的精确放置。而是使用布局管理器,或 combinations of layout managers 以及 layout padding and borders 用于空白。
  • 你能修改代码并给我解决方案吗???
  • 你能付钱给我吗?顺便说一句,一个懒得拼写“you”这个词的三个字母,或者用“??”表示问题的人。 ?不太可能从我这里得到帮助。
  • 哦抱歉,其实我是在担心代码问题。
  • 你能修改代码并给我解决方案吗?请...

标签: java swing jbutton jtextfield


【解决方案1】:

这些行在这里:

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

在焦点侦听器代码中说,当您单击文本字段时,将其文本设置为空字符串。

【讨论】:

  • 但是如果我单独点击 selectionSort 按钮,文本字段不会被清除
  • 如果“btnBubbleSort.setEnabled(false);”被删除,文本字段也不会被清除
【解决方案2】:

首先,可怕的嵌套 ActionPerformed 你已经到了那里。

除此之外,文森特·拉姆达尼 (Vincent Ramdhanie) 对问题的根源是正确的。它仅在您单击某个按钮时发生的原因是,当您禁用一个按钮时,它就无法获得焦点,这会迫使焦点在其他东西上,在 disable-btnBubbleSort 的情况下,这似乎是您的文本字段.

请尝试使用 setVisible(false) 和 setVisible(true),而不是 btnSelectionSort.setEnabled(false) 和 btnSelectionSort.setEnabled(true)。

如果这不起作用,请删除 onfocus-part,并使用鼠标单击事件来代替。

【讨论】:

    猜你喜欢
    • 2019-12-11
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 2012-05-17
    相关资源
    最近更新 更多