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

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() or setVisible(...),而不是在此之前。

始终把它当作习惯,每当您覆盖paintcomponent()方法时,也要覆盖getPreferredSize()方法。

并始终像pack()/setVisible(...)在EDT-

事件调度线程中那样发出呼叫。请阅读Swing中的Concurrency,以获取有关该主题的更多详细信息。

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);

}

}

以上是 在添加到另一个JPanel的JPanel中不显示图形 的全部内容, 来源链接: utcz.com/qa/406617.html

回到顶部