我在JPanel上显示绘图时遇到问题。我创建了三个相互链接的类,如下所示。我想知道为什么这段代码没有显示我的绘图。
c.add(pDraw);
pDraw.add(draw);
1)MAIN
public class mainPage {
public static void main(String[]args){
JFrame appFrame = new Frame();
appFrame.setVisible(true);
appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
2)JFRAME
public class Frame extends JFrame implements ActionListener{
private drawingBoard draw;
public Frame (){
draw = new drawingBoard(); //generate pattern
GridBagLayout m = new GridBagLayout();
Container c = (Container)getContentPane();
c.setLayout (m);
GridBagConstraints con;
.......
JPanel pDraw = new JPanel();
pDraw.setPreferredSize(new Dimension(500,500));
.....
c.add(pDraw);
pDraw.add(draw); // Call other class for drawing
.....
setResizable(false);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
3)JPANEL
public class drawingBoard extends JPanel {
.....
public void paint(Graphics g) {
......
}
}
答案 0 :(得分:3)
这是答案,我忘了设置drawingBoard JPanel的大小: - )
public class drawingBoard extends JPanel {
public drawingBoard(){
setPreferredSize(new Dimension (500,500));
}
}
答案 1 :(得分:1)
对您的代码进行一行更改。
您所要做的就是阅读Swing tutorial on "Custom Painting"以弄清楚您做错了什么。
这是连续第三个问题,如果你不愿阅读本教程,可以在几分钟内解决。
你仍然没有学会如何发布SSCCE,所以我不打算给你答案。
答案 2 :(得分:0)
虽然在没有看到GridBagConstraints或paint()方法的情况下调试代码有点困难,但我会告诉你,覆盖paintComponent()方法而不是paint()方法通常会更好。在drawingBoard中,尝试这样做而不是覆盖paint():
public void paintComponent(Graphics g) {
super.paintComponent(g); //optional
...
}
这可能会有所作为。有关详细信息,请check out this article from Java。
此外,作为免费赠品,您可能不需要在main()方法和Frame的构造函数中执行setVisible()和setDefaultCloseOperation()。
答案 3 :(得分:0)
我同意Ben Torell在他的帖子中提出的所有观点 - 加上一些额外的故障排除建议。
试试这个 -
public class DrawingBoardTest extends JFrame {
public DrawingBoardTest() {
getContentPane().add(new drawingBoard(), BorderLayout.CENTER);
}
public static void main(String[] args ) {
JFrame f = new DrawingBoardTest();
f.setSize(500, 500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
如果drawingPanel出现,那么你的GridBagLayout就会出现问题,或者在drawingPanel上设置的首选大小不足以显示图形,或者将drawingBoard添加到pDraw(据我所见,从代码中,并不是真的需要......)。
JFrame内容窗格的默认布局是BorderLayout,它将为中心组件提供所有空间,这是我在我发布的代码中放置drawingBoard的地方。
JPanel的默认布局是FlowLayout,它只会为组件提供首选大小。我看到你在pDraw上设置首选大小,但在原始代码中没有在drawingBoard上设置 - drawingBoard可能有一个首选的大小设置太小而无法显示图形。
如果drawingPanel没有出现 - 那么你的drawingPanel paint()方法就会出现问题。