单击某个按钮时从JPanel中删除文本

时间:2018-04-19 04:28:14

标签: java swing awt jbutton jtextfield

我正在尝试为我正在制作的基于文本的冒险游戏创建GUI。 我需要做的事情就是按钮" jButton3"点击, 它将删除" jText1"的文本。我尝试添加一个ItemListener,但我似乎无法弄明白。代码如下。为了简单起见,我省略了所有的Imports以及我的包名,只是知道当我尝试运行这个程序时没有任何错误。

我搜索了与我的主题相关的其他帖子,但找不到我想要的内容,其中大部分是关于将文本从TextField替换为JLabel

public class DemoGUI extends javax.swing.JFrame {
    public JLabel jLabel1;
    public JTextField jText1;
    public JButton jButton1;
    public JButton jButton2;
    public JButton jButton3;
    String string1;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                DemoGUI inst = new DemoGUI();
                inst.setLocationRelativeTo(null);
                inst.setVisible(true);
            }
        });
    }
    public DemoGUI() {
        super();
        initGUI();
    }
    private void removeTextWhenClicked(JButton btn, ItemEvent ev) {
        if(ev.getStateChange() == ItemEvent.ITEM_STATE_CHANGED) {
            jText1.setText("");
        }
    }

    public void initGUI() {
        try {
            FlowLayout thisLayout = new FlowLayout();
            getContentPane().setLayout(thisLayout);
            setDefaultCloseOperation(EXIT_ON_CLOSE);

                jLabel1 = new JLabel("Center", SwingConstants.CENTER);
                getContentPane().add(jLabel1);
                jLabel1.setPreferredSize(new Dimension(320, 250));
                jLabel1.setText(string1);
                jLabel1.setBorder(BorderFactory.createLineBorder(Color.BLACK));

                jButton1 = new JButton();
                getContentPane().add(jButton1);
                jButton1.setPreferredSize(new Dimension(100, 50));
                jButton1.setText("Map");

                jButton2 = new JButton();
                getContentPane().add(jButton2);
                jButton2.setPreferredSize(new Dimension(100, 50));
                jButton2.setText("Inventory");

                jText1 = new JTextField();
                getContentPane().add(jText1);
                jText1.setPreferredSize(new Dimension(320, 100));
                jText1.setBorder(BorderFactory.createLineBorder(Color.BLACK));

                jButton3 = new JButton();
                getContentPane().add(jButton3);
                jButton3.setPreferredSize(new Dimension(100, 40));
                jButton3.setText("Submit");
                jButton3.addItemListener(ev -> removeTextWhenClicked(jButton3, ev));

            pack();
            this.setSize(350, 500);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

1 个答案:

答案 0 :(得分:2)

使用addActionListener

而不是使用addItemListener
 jButton3.addActionListener(new ActionListener(){  
    public void actionPerformed(ActionEvent e){  

        }  
    });  

您可以在Java: What's the difference between ActionEvent and ItemEvent on a JRadioButton?

找到差异
  

当按钮的状态为时,会通知ItemListeners   无论是通过用户与按钮进行交互还是改变   以编程方式(通过setSelected方法)。

     

当用户与按钮

交互时,将调用ActionListeners