

以下のコードに `"Botton
5"`を追加するとして、`Botton5`を押した時、今までどのボタンを押したか履歴が表示されるようにするにはどう書き加えればよいでしょうか。

[code]

    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.BorderLayout;
    
    public class SwingTest extends JFrame implements ActionListener{
      JLabel label;
    
      public static void main(String[] args){
        SwingTest test = new SwingTest("SwingTest");
    
        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        test.setVisible(true);
      }
    
      SwingTest(String title){
        setTitle(title);
        setBounds( 10, 10, 300, 200);
    
        label = new JLabel("");
        label.setHorizontalAlignment(JLabel.CENTER);
    
        JButton btn1 = new JButton("Button 1");
        btn1.addActionListener(this);
        btn1.setActionCommand("Button 1");
    
        JButton btn2 = new JButton("Button 2");
        btn2.addActionListener(this);
        btn2.setActionCommand("Button 2");
    
        JButton btn3 = new JButton("Button 3");
        btn3.addActionListener(this);
        btn3.setActionCommand("Button 3");
    
        JButton btn4 = new JButton("Button 4");
        btn4.addActionListener(this);
        btn4.setActionCommand("Button 4");
    
        JPanel p = new JPanel();
        p.add(btn1);
        p.add(btn2);
        p.add(btn3);
        p.add(btn4);
    
        getContentPane().add(p, BorderLayout.CENTER);
        getContentPane().add(label, BorderLayout.PAGE_END);
      }
    
      public void actionPerformed(ActionEvent e){
        String cmd = e.getActionCommand();
    
        if (cmd.equals("Button 1")){
          label.setText("open");
        }else if (cmd.equals("Button 2")){
          label.setText("print");
        }else if (cmd.equals("Button 3")){
          label.setText("rename");
        }else if (cmd.equals("Button 4")){
          label.setText("move");
        }
      }
    }
    
[/code]


CC BY-SA 4.0
2019-10-07T16:04:51.990
59542
2019-10-08T01:22:22.220
2019-10-07T16:55:36.230
3068
35992
question
java swing
swingで押されたボタンの履歴を表示したい


履歴を保持する`ArrayList`などのフィールドを用意して、

[code]

    private static List<String> history = new ArrayList<>();
    
[/code]

ボタンがクリックされたら、そこにラベルを追加して、表示すればいいと思います。

[code]

    public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand();
        history.add(cmd);
        if (cmd.equals("Button 1")) {
            label.setText("open");
        } else if (cmd.equals("Button 2")) {
            label.setText("print");
        } else if (cmd.equals("Button 3")) {
            label.setText("rename");
        } else if (cmd.equals("Button 4")) {
            label.setText("move");
        } else if (cmd.equals("Button 5")) {
            label.setText(history.toString());
        }
    }
    
[/code]

表示の仕方などは工夫した方がいいと思いますが。


CC BY-SA 4.0
2019-10-08T01:22:22.220
59548
2019-10-08T01:22:22.220
21092
59542
answer