Java - 双菜单栏 - 设置'静态'和'无效'参数

时间:2015-03-31 15:36:02

标签: java reference static void

问题在于:

  1. paintUI() 因为不能对Gui
  2. 类型的非静态方法paintUI()进行静态引用
  3. exitb.addActionListener。
  4. AbstractButton类型中的方法addActionListener(ActionListener)不适用于参数(new ActionListener(){})

    我该如何解决?

    //imports..
    
    public class Gui extends JFrame 
    { 
    
    
    public Gui() { 
        paintUI();
        }
    
        public final void paintUI() 
        {
            createToolBars();   
            JFrame f=new JFrame();
            //setting of 'f' ...  
        } 
    
    
        private void createToolBars() {
    
            JToolBar toolbar1 = new JToolBar();
            JToolBar toolbar2 = new JToolBar();
    
            ImageIcon newi = new ImageIcon("new.png");
            //another next icons..
    
            JButton newb = new JButton(newi);
            // another next jbuttons
    
            toolbar1.add(newb);
    

    这是exitb.addActionListener的问题,因为..: 此行有多个标记      - 无法将ActionListener解析为类型      - 类型中的方法addActionListener(ActionListener)      AbstractButton不适用于参数(new ActionListener(){})

            exitb.addActionListener(new ActionListener() {
    
                public void actionPerformed(ActionEvent event) {
                    System.exit(0);
                }
    
            });
            createLayout(toolbar1, toolbar2);  
        }
    
        private void createLayout(JComponent... arg) {
    
            Container pane = getContentPane();
            //some creating....
    
            gl.setHorizontalGroup(gl.createParallelGroup()
                    .addComponent(arg[0], GroupLayout.DEFAULT_SIZE, 
                     GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(arg[1], GroupLayout.DEFAULT_SIZE, 
                     GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            );
    
            gl.setVerticalGroup(gl.createSequentialGroup()
                    .addComponent(arg[0])
                    .addComponent(arg[1])
            );
        }
    
        public static void main(String[] args) 
        {
    
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
    

    / ** 这是参考“paintUI()”的问题,因为: 无法从类型Gui对非静态方法paintUI()进行静态引用 * /

                    paintUI(); 
                }
            });
        }  
    } }
    

2 个答案:

答案 0 :(得分:1)

paintUI();//here is a problem with reference

您尚未创建Gui类的实例,因此您无法调用该类的方法。

相反,你应该使用:

new Gui();

您不需要调用paintUI(),因为Gui类的构造函数会为您执行此操作。

正如另一个答案所示,实际上应该从SwingUtilities.invokeLater()内调用上述语句,因为所有GUI组件都应该在Event Dispatch Thread(EDT)上创建。阅读Concurrency上的Swing教程中的部分。这是一个需要理解的重要概念。

答案 1 :(得分:0)

Ad.1。要从静态方法调用非静态方法,您需要引用对象。例如:

    public static void main(String[] args) 
    {
        Gui gui = new Gui();

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {

                gui.paintUI();
            }
        });
    }