在JPanel中未显示添加到另一个JPanel的图形
问题描述:
将具有图形的JPanel
添加到JFrame
时,它工作正常。但是当我尝试添加一个JPanel
,其中我添加了另一个JPanel
图形,但它没有显示在JFrame
中。请看下面的代码在JPanel中未显示添加到另一个JPanel的图形
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()
方法。
并且始终在EDT - Event Dispatch Thread中放置pack()/setVisible(...)
等呼叫。请阅读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);
}
}
简单地覆盖[的getPreferredSize()](http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#getPreferredSize()),并使其返回一定的价值就像'返回新的Dimension(300,300);',在你的'SamplePanel Class'里面' – 2012-07-07 15:33:54
请参阅'我如何将JPanel类添加到NetBeans的JFrame表单类中?'在更多信息的stackoverflow – MaVRoSCy 2012-07-07 15:35:50
@MaVRoSCy:伙伴,你只是忘了把链接到评论,就像为了在这里发表评论,把方括号[]放在这里像[这里],然后像[这里]括号一样, ()并在括号内粘贴URL。 – 2012-07-08 05:44:32