在添加到另一个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