Java SWING没有正确绘画

时间:2015-05-07 14:46:52

标签: java swing nullpointerexception paintcomponent mouse-listeners

我遇到了JFrame无法正确绘制的问题。有人可以看看解决方案吗?我尝试过使用BoxLayouts,但它也无法正常工作。在我将鼠标悬停在按钮上之前,按钮不会显示。

它只在一个文件和可执行文件中。

此致

/index.php?option=com_content&view=article&id=article_id

2 个答案:

答案 0 :(得分:1)

除了NullPointerException之外,还有很多问题。

您不应直接致电paint

Graphics g = getGraphics();
paint(g);

使用repaint();代替paint(getGraphics());

您不应修改传递给Graphics的{​​{1}}:

paintComponent

除了你试图绘画的其他组件外,这可能会意外地转移到其他组件上。

而是创建副本:

Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(...);
g2.setComposite(...);

您不应该在Graphics2D g2 = (Graphics2D) g.create(); g2.setRenderingHint(...); g2.setComposite(...); ... // and dispose it at the end of paintComponent g2.dispose();

中修改组件状态
paintComponent

执行此操作可能会导致重复无限循环,因为如果颜色不同,public void paintBackground() { setBackground(Color.WHITE); } @Override public void paintComponent(Graphics g) { ... paintBackground(); 会重新绘制。

相反,请使用setBackgroundg.fillRect(...)

答案 1 :(得分:0)

您的Shape temp被声明为类字段,但会在public void mouseDragged(MouseEvent e)中初始化。所以在第一次拖动操作之前它是null,而在temp.draw(g);中它给出了一个Exception。