【问题标题】:add jpanel from method to jframe将 jpanel 从方法添加到 jframe
【发布时间】:2012-08-26 14:17:29
【问题描述】:

在我的项目中,我有一些课程。一个创建 gui 的类,JFrame 除外。 我将在我的 Main 类中创建 JFrame,例如:

import javax.swing.*;
import java.awt.*;

public class KodeHusker {

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable(){
        @Override
        public void run(){
            JFrame f = new JFrame();
            f.setLayout(new FlowLayout());
            f.add(new JLabel("test"));
            f.add(new GUI().viewProgram());//it works fine, when i remove this
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        }
    });
}
}

gui 类是我创建所有 gui 的地方,viewProgram 方法声明为:

public JPanel viewProgram(){}

返回一个 JPanel。

正如代码中的注释所说,当我删除该行时,它一切正常,但是当我拥有它时,JFrame 永远不会显示,尽管没有任何异常。关闭程序的快捷方式也不起作用。

有人知道我做错了什么吗? 感谢您的建议。

【问题讨论】:

  • 您可能向我们展示了错误的代码,因为我敢打赌问题出在 viewProgram() 或您的 GUI 的构造函数中。我怀疑你有一个无限循环在那里进行,或者以其他方式踩踏 Swing 事件线程,也称为 EDT 或事件调度线程。顺便说一句,我喜欢你试图避免不必要地扩展 Swing GUI 组件。这是一件值得努力的好事情。
  • 检查空异常处理程序。
  • @HovercraftFullOfEels,是的,你是对的。仔细一看,在viewProgram()中发现了一个没有结束的while语句。
  • 啊好。即使是盲松鼠也会时不时地找到一颗坚果。很高兴你把它修好了!

标签: java swing jframe return jpanel


【解决方案1】:

这是 jPanel 应该是什么样子,不确定(可以看到你的代码吗?)

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class JPanelExt extends JPanel  implements Runnable {
private int xCoor = 50;
private boolean moving = false;

 public JPanelExt() {       
      //Thread 
          thread = new Thread (this);       //
          thread.start();   }   

  public void paintComponent (Graphics g)
     {  
            super.paintComponent(g);
    g.drawString("DVC 10.0",xCoor,30);  
            g.drawRect(50, 50, 200,100);    
            g.drawOval(50,50,200,100);  
}   
    @Override
public void run() {
while (true)
        {   
    if (moving==true)
                   {    
          this.xCoor = this.xCoor+10;
        if (xCoor > this.getWidth())
                             {  
            xCoor = 0;      
                       }
            this.repaint(); 
               }        
        try {
            Thread.sleep(50);
        }
                catch (InterruptedException e) {    
        e.printStackTrace();            
                    }   
   }    
   public void setMoving(boolean moving) 
       {    
            this.moving = moving;   
        }
}

【讨论】:

    猜你喜欢
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    相关资源
    最近更新 更多