Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在添加到另一个JPanel的JPanel中不显示图形_Java_Swing_Jpanel_Paintcomponent - Fatal编程技术网

Java 在添加到另一个JPanel的JPanel中不显示图形

Java 在添加到另一个JPanel的JPanel中不显示图形,java,swing,jpanel,paintcomponent,Java,Swing,Jpanel,Paintcomponent,将带有图形的JPanel添加到JFrame时,它工作正常。但是当我尝试添加一个JPanel时,我在其中添加了另一个带有图形的JPanel,它不会显示在JFrame中。请参阅下面的代码 package sample; import java.awt.Graphics; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Main extends JFrame

将带有图形的
JPanel
添加到
JFrame
时,它工作正常。但是当我尝试添加一个
JPanel
时,我在其中添加了另一个带有图形的
JPanel
,它不会显示在
JFrame
中。请参阅下面的代码

package sample;

import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends JFrame{
    public static void main(String[] args) {
        new Main();
    }

    public Main(){
        setTitle("Sample");
        setVisible(true);
        setSize(500,500);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        add(new SamplePanel2());
    }
}

class SamplePanel2 extends JPanel{
    public SamplePanel2(){
        add(new JButton("Hi"));
        add(new SamplePanel());
    }
}
class SamplePanel extends JPanel {
    public SamplePanel(){
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawString("HHHHHHHHHHHH", 100, 100);
    }
}

请注意
Main
类的构造器,使其成为您遵循本例所示顺序的习惯。首先将组件添加到
JFrame
,然后只调用
pack()、setSize()或setVisible(…)
,而不是在此之前

始终使其成为您的习惯,即每当您重写
paintcomponent()
方法时,也要重写
getPreferredSize()
方法

并始终将类似于
pack()/setVisible(…)
的调用放在EDT-Event分派线程中。请阅读,了解更多有关该主题的详细信息

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends JFrame{
    public static void main(String[] args) {
        new Main();
    }

    public Main(){
        setTitle("Sample");        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setContentPane(new SamplePanel2());
        pack();        
        setVisible(true);
    }
}

class SamplePanel2 extends JPanel{
    public SamplePanel2(){
        add(new JButton("Hi"));
        add(new SamplePanel());
    }
}
class SamplePanel extends JPanel {
    public SamplePanel(){
    }

    @Override
    public Dimension getPreferredSize()
    {
        return (new Dimension(300, 300));
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawString("HHHHHHHHHHHH", 100, 100);
    }
}

请注意
Main
类的构造器,使其成为您遵循本例所示顺序的习惯。首先将组件添加到
JFrame
,然后只调用
pack()、setSize()或setVisible(…)
,而不是在此之前

始终使其成为您的习惯,即每当您重写
paintcomponent()
方法时,也要重写
getPreferredSize()
方法

并始终将类似于
pack()/setVisible(…)
的调用放在EDT-Event分派线程中。请阅读,了解更多有关该主题的详细信息

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends JFrame{
    public static void main(String[] args) {
        new Main();
    }

    public Main(){
        setTitle("Sample");        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setContentPane(new SamplePanel2());
        pack();        
        setVisible(true);
    }
}

class SamplePanel2 extends JPanel{
    public SamplePanel2(){
        add(new JButton("Hi"));
        add(new SamplePanel());
    }
}
class SamplePanel extends JPanel {
    public SamplePanel(){
    }

    @Override
    public Dimension getPreferredSize()
    {
        return (new Dimension(300, 300));
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawString("HHHHHHHHHHHH", 100, 100);
    }
}

只需重写并使其返回一些值,如
returnnewdimension(300300)
,在您的
SamplePanel类中
请参阅stackoverflow上的“如何将JPanel类添加到netbeans中的JFrame表单类中?”了解更多信息info@MaVRoSCy:伙计,你只是忘了放评论的链接,比如为了在这里放评论,在这里放方括号[],比如[here],后面是括号,比如[here]()然后在括号内粘贴URL。只需重写并使其返回一些值,如
returnnewdimension(300300)
,在您的
SamplePanel类中
请参阅stackoverflow上的“如何将JPanel类添加到netbeans中的JFrame表单类中?”了解更多信息info@MaVRoSCy:伙计,你只是忘了放评论的链接,比如为了在这里放评论,在这里放方括号[],比如[here],后面是括号,比如[here]()在括号内粘贴URL。@user1508907:注意
JPanel
的默认布局是。非常欢迎您并保持微笑:-)@user1508907:注意
JPanel
的默认布局是。非常欢迎您并保持微笑:-)