88304


現在、JavaでGUIを作っています。  
そこでJButtonでbuttonをクリックしたときに、「Hello World!」とGUI上に出力されるようなプログラムを作ろうとしています。  
ボタンを押した際に文字が出力されるようにするには、どのようにすれば良いでしょうか。  
どなたかわかる方、教えてくれると幸いです。

**現状のコード：**

[code]

    import java.awt.*;
    import javax.swing.*;
    public class Main{
      public static void main (String[] args){
        JFrame frame = new JFrame("GUI");
        int w = 600, h = 400;
        
        frame.setSize(w,h);
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
        JLabel label = new JLabel("Hello World!");
        frame.getContentPane().setLayout(new FlowLayout());
        frame.getContentPane().add(label);
        
        JButton button = new JButton("ここのボタンを押したらHello World!と出力したい");
        frame.getContentPane().add(button);
    
        
    
        
      }
    }
    
[/code]


CC BY-SA 4.0
2022-04-12T17:20:41.573
88302
2022-04-12T20:29:15.717
2022-04-12T18:07:14.077
51596
51596
question
java
GUIでボタンを押したときに、文字の出力をしたい


Swing は公式のチュートリアルが充実しており、サンプルコードも添付されていますので、基本的なことはその中を検索するのが良いかと思います。  
(Java7 ごろのものですが、Swing 自体はそのころから変わっていません。現在の Java
はラムダ式が利用できるので異なる書き方ができる部分もありますが。)

  * [Trail: Creating a GUI With Swing (The Java™ Tutorials)](https://docs.oracle.com/javase/tutorial/uiswing/)

目次からそれっぽいセクションを辿っていくと、 [**Using Swing Components > How to Use Buttons, Check
Boxes, and Radio Buttons > How to Use the Common Button
API**](https://docs.oracle.com/javase/tutorial/uiswing/components/button.html#abstractbutton)
に解説があるのが見つかると思います。  
完全なサンプルコードは、ここから辿れる
[`ButtonDemo.java`](https://docs.oracle.com/javase/tutorial/uiswing/examples/components/index.html#ButtonDemo)
にあります。  
(同様に、`FlowLayout`については [**How to Use
FlowLayout**](https://docs.oracle.com/javase/tutorial/uiswing/layout/flow.html),
[`FlowLayoutDemo.java`](https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/layout/FlowLayoutDemoProject/src/layout/FlowLayoutDemo.java)
が見つかります。)

* * *

上記を踏まえて、質問文中のコードを意図している動作にするには次のようになります:

[code]

    import javax.swing.*;
    import java.awt.*;
    
    public class Main {
        public static void main(String[] args) {
            SwingUtilities.invokeLater(() -> {
                JFrame frame = new JFrame("GUI");
                int w = 600, h = 400;
    
                frame.setSize(w, h);
                frame.setVisible(true);
                frame.setLocationRelativeTo(null);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
                JLabel label = new JLabel("Hello World!");
                label.setVisible(false);
                frame.getContentPane().setLayout(new FlowLayout());
                frame.getContentPane().add(label);
    
                JButton button = new JButton("ここのボタンを押したらHello World!と出力したい");
                button.addActionListener(e -> {
                    label.setVisible(true);
                });
                frame.getContentPane().add(button);
            });
        }
    }
    
[/code]


CC BY-SA 4.0
2022-04-12T20:29:15.717
88304
2022-04-12T20:29:15.717
2808
88302
answer