gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:24:39 25 4
gpt4 key购买 nike

将具有图形的 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 - 事件调度线程中。请阅读Concurrency in Swing , 有关该主题的更多详细信息。

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

关于java - 在添加到另一个 JPanel 的 JPanel 中不显示图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11376252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com