Java - 空白窗口

时间:2016-04-13 19:55:50

标签: java

我是Java的新手。我的以下代码给了我一个空白窗口。

任何人都可以帮助我了解正在发生的事情?

我认为错误发生在ActionListeners。

public static void main(String[] args) {


        JFrame frame = new JFrame();
        frame.setTitle("Listeners"); 
        frame.setSize(400, 200); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true); 
        frame.setLayout(new BorderLayout()); 

        JTextArea txtArea = new JTextArea();
        HelloActionListener hlisten = new HelloActionListener(txtArea); 
        JButton bl = new JButton("TOP"); 
        bl.addActionListener((ActionListener) hlisten); 
        JButton b2 = new JButton("LEFT"); 
        ActionListener rightListener = (ActionEvent e) -> {
            txtArea.setText("Yes,let's go Left");
        }; 
    b2.addActionListener(rightListener); 
    JButton b3 = new JButton("RIGHT"); 
    b3.addActionListener((ActionEvent e) -> {
                txtArea.setText("Sorry, we cant go Right");
        });

    JButton b4 = new JButton("Bottom"); 
    b4.addActionListener((ActionListener) hlisten);

    frame.add(bl, BorderLayout.PAGE_START); 
    frame.add(b2, BorderLayout.LINE_START); 
    frame.add(b3, BorderLayout.LINE_END); 
    frame.add(b4, BorderLayout.PAGE_END); 
    frame.add(txtArea, BorderLayout.CENTER); 
            frame.setVisible(true);
}

2 个答案:

答案 0 :(得分:0)

说你想把"你好"按下顶部按钮时,在文本区域中。然后,您需要定义HelloActionListener,如下所示:

private static class HelloActionListener implements ActionListener {

    private JTextArea textArea;
    public HelloActionListener(JTextArea textArea) {
        this.textArea = textArea;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        textArea.setText("Hello");
    }
}

你的其他代码有点乱,但应该可以工作,但是,你不需要让框架可见两次。

<强>更新

但我确实认为你的代码应该是这样的:

public class MyApplication extends JFrame {

    public MyApplication() {
        setTitle("Listeners");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        JTextArea txtArea = new JTextArea();
        HelloActionListener hlisten = new HelloActionListener(txtArea);
        JButton bl = new JButton("TOP");
        bl.addActionListener(hlisten);
        JButton b2 = new JButton("LEFT");
        ActionListener rightListener = e -> {
            txtArea.setText("Yes,let's go Left");
        };
        b2.addActionListener(rightListener);
        JButton b3 = new JButton("RIGHT");
        b3.addActionListener(e -> {
            txtArea.setText("Sorry, we cant go Right");
        });

        JButton b4 = new JButton("Bottom");
        b4.addActionListener(hlisten);

        add(bl, BorderLayout.PAGE_START);
        add(b2, BorderLayout.LINE_START);
        add(b3, BorderLayout.LINE_END);
        add(b4, BorderLayout.PAGE_END);
        add(txtArea, BorderLayout.CENTER);
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(() -> {
            JFrame frame = new MyApplication();
            frame.pack();
            frame.setVisible(true);
        });
    }

    private class HelloActionListener implements ActionListener {

        private JTextArea textArea;
        public HelloActionListener(JTextArea textArea) {
            this.textArea = textArea;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            JButton button = (JButton) e.getSource();
            textArea.setText("Hello from " + button.getText());
        }
    }
}

答案 1 :(得分:0)

您的代码中不需要第一个frame.setVisible(true); - 您最后会再次调用它。但你的面板都是零尺寸。在将其设置为可见之前,您需要致电frame.pack();。另请注意,所有这些(GUI内容)都应该从Event Dispatch Thread完成,而不是从主线程完成。