Swing代码编译错误“缺失;”

时间:2016-07-07 14:50:37

标签: java swing compiler-errors

如何解决此编译错误?请注意,我是Swing的新手。

http://prntscr.com/bpz2ve

package gui;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.*;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class GUI extends Frame {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Hello World - YaBoiAce");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setSize(500, 300);

        // Layout //
        frame.setLayout(new BorderLayout());

        // Swing Component //
        final JTextArea textarea = new JTextArea();
        JButton jbutton = new JButton("Click me");

        // Add Component to content pane
        Container c = frame.getContentPane();

        c.add(textarea,BorderLayout.CENTER);
        c.add(jbutton, BorderLayout.SOUTH);

        // Action Listener
        jbutton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textarea.append("Hello");
            } // Eclipse says 'missing ;' on this line.
        } 
            private static void setDefaultCloseOperation(int exitOnClose) {

            }

        }
Eclipse说“失踪”;但当我把它放进去时,它突出了;说“想念;”再次。它继续这样做。有什么帮助吗?

它位于标有:

的行上
// Eclipse says 'missing ;' on this line.

1 个答案:

答案 0 :(得分:2)

您的代码中存在许多问题:

  1. 如中所述 comments 通过@HovercraftFullOfEels:
  2.   

    您的addActionListener方法也不匹配右括号。再好的代码格式化将帮助您看到这一点。

    // Action Listener
    jbutton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            textarea.append("Hello");
        } // Eclipse says 'missing ;' on this line.
    }); //HERE YOU NEED TO ADD: );
    
    1. 您正在扩展Frame(也许您试图扩展JFrame) 并创建一个JFrame对象,选择您要使用的对象 (建议创建对象而不是扩展,因为如果 你延长JFrame你的班级 JFrame而不能 包含在其他地方,你不会改变它的功能 要么这样,就不需要延长了。

    2. 您正在创建私有静态方法

      private static void setDefaultCloseOperation(int exitOnClose) {}
      
    3. 该方法应该是公开的并且属于JFrame类,我猜你的IDE写了当你扩展Frame而不是JFrame时。

      Frame属于java.awtJFrame属于javax.swing所以,它们不一样。

      1. 您正在main内创建窗口和每个组件 方法而不是构造函数

      2. 您已将组件添加到Container,但从未将该容器添加到JFrame,因此您需要致电

        frame.setContentPane(c);
        
      3. 所以你的代码应该是这样的:

        import java.awt.BorderLayout;
        import java.awt.Container;
        import java.awt.event.*;
        
        import javax.swing.JButton;
        import javax.swing.JFrame;
        import javax.swing.JTextArea;
        import javax.swing.SwingUtilities;
        
        public class GUI {
            JFrame frame;
            public GUI() {
                frame = new JFrame("Hello World - YaBoiAce");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
                frame.setSize(500, 300);
        
                // Layout //
                frame.setLayout(new BorderLayout());
        
                // Swing Component //
                final JTextArea textarea = new JTextArea();
                JButton jbutton = new JButton("Click me");
        
                frame.add(textarea,BorderLayout.CENTER);
                frame.add(jbutton, BorderLayout.SOUTH);
        
                // Add Component to content pane
                Container c = frame.getContentPane();
        
                c.add(textarea,BorderLayout.CENTER);
                c.add(jbutton, BorderLayout.SOUTH);
        
                frame.setContentPane(c);
        
                // Action Listener
                jbutton.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        textarea.append("Hello");
                    } // Eclipse says 'missing ;' on this line.
                });
            }
            public static void main(String[] args) {
                SwingUtilities.invokeLater(() -> new GUI());
            }
        }