类扩展与Swing无法正常工作

时间:2015-04-17 15:53:14

标签: java jpanel

我从java开始,我尝试创建一个带按钮的窗口(类Fenetre)并在其中添加图片和一些文本(类AccueilPanel)但是当我构建它时,只有窗口+按钮出现。

好像AccueilPanel课程似乎没有用。这是我的代码:

班级Fenetre

package test.accueil;

import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;


public class Fenetre extends JFrame{    


  public Fenetre(){

      JPanel pan = new JPanel();
        //Définition de sa couleur de fond
        pan.setBackground(Color.YELLOW);        
        //On prévient notre JFrame que notre JPanel sera son content pane
        this.setContentPane(pan);               
        this.setVisible(true);  
    this.setTitle("Box Layout");
    this.setSize(900,900);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocationRelativeTo(null);



    JPanel b1 = new JPanel();
    //On définit le layout en lui indiquant qu'il travaillera en ligne
    b1.setLayout(new BoxLayout(b1, BoxLayout.LINE_AXIS));
    b1.add(new JButton("Jouer !"));
    b1.setBackground(Color.YELLOW); 


    JPanel b2 = new JPanel();
    b2.setLayout(new BoxLayout(b2, BoxLayout.LINE_AXIS));
    b2.add(new JButton("Instructions"));
    b2.add(new JButton("Scores"));
    b2.setBackground(Color.YELLOW); 



    JPanel b4 = new JPanel();
    //On positionne maintenant ces trois lignes en colonne
    b4.setLayout(new BoxLayout(b4, BoxLayout.PAGE_AXIS));
    b4.add(b1);
    b4.add(b2);
    b4.setBackground(Color.YELLOW);


    this.getContentPane().add(b4);
    this.setVisible(true);    


  }

  protected JPanel getPanel(){
        return this.b4;
    }   
    protected JPanel b4;    


    public static void main(String[] args) {    
    Fenetre fenetre = new Fenetre();

    }

}

班级AccueilPanel

package test.accueil;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTextArea;

public class AccueilPanel extends Fenetre{

    public AccueilPanel(Dimension dim){
        initPanel();
    }

    public void initPanel(){
        JLabel titre = new JLabel("Bienvenue dans le jeu du pendu\n");
        titre.setHorizontalAlignment(JLabel.CENTER);
        this.b4.add(titre, BorderLayout.NORTH);

        this.b4.add(new JLabel(new ImageIcon("images/moon.jpg")), BorderLayout.CENTER);

        JTextArea texte = new JTextArea("Bienvenue dans mon jeu ! ");

        texte.setEditable(false);
        texte.setBackground(Color.white);

        this.b4.add(texte, BorderLayout.SOUTH);
    }

}

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

如果两个类“package是显式的,那么使用您的代码进行子类化的唯一方法就是这样。因此,在两个文件的第一行添加say package maison;,运行时应该能够毫无问题地访问这两个类。

好的,我让你的代码工作,我正在粘贴这两个文件:

package test.accueil;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTextArea;

public class AccueilPanel extends Fenetre{

    public AccueilPanel(Dimension dim){
        super();
        initPanel();
    }

    public void initPanel(){
        JLabel titre = new JLabel("Bienvenue dans le jeu du pendu\n");
        titre.setHorizontalAlignment(JLabel.CENTER);
        b4.add(titre, BorderLayout.NORTH);

        b4.add(new JLabel(new ImageIcon("images/moon.jpg")), BorderLayout.CENTER);

        JTextArea texte = new JTextArea("Bienvenue dans mon jeu ! ");

        texte.setEditable(false);
        texte.setBackground(Color.white);

        b4.add(texte, BorderLayout.SOUTH);
    }

}
package test.accueil;

import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;


public class Fenetre extends JFrame{    


  public Fenetre(){

      JPanel pan = new JPanel();
        //Définition de sa couleur de fond
        pan.setBackground(Color.YELLOW);        
        //On prévient notre JFrame que notre JPanel sera son content pane
        this.setContentPane(pan);               
        this.setVisible(true);  
    this.setTitle("Box Layout");
    this.setSize(900,900);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocationRelativeTo(null);



    JPanel b1 = new JPanel();
    //On définit le layout en lui indiquant qu'il travaillera en ligne
    b1.setLayout(new BoxLayout(b1, BoxLayout.LINE_AXIS));
    b1.add(new JButton("Jouer !"));
    b1.setBackground(Color.YELLOW); 


    JPanel b2 = new JPanel();
    b2.setLayout(new BoxLayout(b2, BoxLayout.LINE_AXIS));
    b2.add(new JButton("Instructions"));
    b2.add(new JButton("Scores"));
    b2.setBackground(Color.YELLOW); 



    JPanel b4 = new JPanel();
    //On positionne maintenant ces trois lignes en colonne
    b4.setLayout(new BoxLayout(b4, BoxLayout.PAGE_AXIS));
    b4.add(b1);
    b4.add(b2);
    b4.setBackground(Color.YELLOW);


    this.getContentPane().add(b4);
    this.setVisible(true);    


  }

  protected JPanel getPanel(){
        return this.b4;
    }   
    protected JPanel b4;    


    public static void main(String[] args) {    
    Fenetre fenetre = new Fenetre();
    }
}

...以及我用来编译它的命令行javac -d . Fenetre.java AccueilPanel.java

要运行它,我使用了java -cp . test.accueil.AccueilPanel。希望有所帮助。

答案 1 :(得分:0)

您的代码中没有任何地方实际创建AccueilPanel类的实例并将其设置为可见。 (因为它是JFrame)

您需要将以下代码添加到适当的位置,以便创建并显示一个

AccueilPanel accPanel = new AccueilPanel(new Dimension(100,100));
accPanel.setVisible(true);

但是,类的命名表明你希望这个类是一个面板而不是一个新的框架,也许你应该考虑让它扩展JPanel