2012-07-23 121 views
0

我从我的主类使用下面的调用创建另一个类的一个对象的Java漆:问题与框架

JSplash splash = new JSplash(); 

然而,当我创建这个对象它执行JSplash类的构造函数,并给出我的窗户和我的按钮。但它不会画在画框上。你能帮我解决这个问题吗?

import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 

/** 
* 
* @author Curtis 
*/ 
public class JSplash extends DFrame implements ActionListener { 
//declaration of variable objects 
    Font myFont = new Font("Arial", Font.BOLD, 20); 
    JButton myButton = new JButton("Click Me!"); 
    Color bgColor = new Color(0, 0, 255); 
    Color firstColor = new Color(255, 255, 255); 
    String first = "Welcome to DaemoDynamics!"; 
    String last = "Click the Button"; 
    String middle = ""; 
    String middle2 = ""; 
    private static int count = 1; 
    DFrame splash = new DFrame(); 
//Constructor 
    public JSplash() { 
     setDefaultLookAndFeelDecorated(true); 
     System.out.println("Hello"); 
     setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
     splash.add(myButton); 
     getContentPane().setBackground(bgColor); 
     //adds action listener 
     myButton.addActionListener(this); 
     splash.setVisible(true); 
    } 
//Paint method 
    @Override 
    public void paint(Graphics e) { 
     System.out.println("paint is being reached"); 
     super.paint(e); 
     e.setFont(myFont); 
     e.setColor(firstColor); 
     e.drawString(first, 14, 80); 
     e.drawString(last, 70, 240); 
     e.drawString(middle, 75, 150); 
     e.drawString(middle2, 60, 175); 
    } 

//Listener Method 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     //First Time button hit 
     if (count == 1) { 
      middle = "Brighter Business"; 
      middle2 = "for A Brighter Future"; 
      last = "Click Again to Begin"; 
      repaint(); 
      //increases button count 
      count++; 
     } else//if button count is not 1 
     { 
      splash.setVisible(false); 
      FinalProject app = new FinalProject(); 
     } 
    } 
} 
+0

对不起,油漆正在达到线我试图看到该方法它不是 – 2012-07-23 06:17:10

+0

添加了'splash.setLayout(新的BorderLayout());'然后改为'add(myButton,BorderLayout.SOUTH);'没有效果 – 2012-07-23 06:25:57

+0

为了更好的帮助, [SSCCE](http://sscce.org/)。 – 2012-07-23 06:27:23

回答

1

您已在您的JSplash构造函数中创建了一个新的DFrame,然后将您的组件添加到了IT。这根本不是必需的。删除参考的飞溅,并简单地使用你已经扩展的DFrame。而当我在看,splash没有布局管理器,这不会帮助。因为在屏幕上显示的窗口永远不会是JSplash,但您创建的DFrame(称为启动)

+0

非常好。谢谢! – 2012-07-23 07:38:59

0

创建一个扩展JPanel的新类。确保您的按钮已添加到该面板,并用您的逻辑覆盖该面板的paintComponent()方法。这应该工作。

Refer here.

风俗画应的paintComponent方法来完成。理想情况下,您不应该重写JFrame的paint方法。