【发布时间】:2012-10-17 09:35:16
【问题描述】:
我遇到了这个问题,我绘制的对象没有出现在 GUI 中。我知道它正在被处理,因为数据被推送到日志文件。但是,图形没有出现。
这是我的一些代码:
public static void main(String[] args)
{
JFrame window = new JFrame();
window.setLayout(new BorderLayout());
window.setVisible(true);
}
我在这里和那里放置了一个按钮和一些其他小部件。中心窗格 (BorderLayout.CENTER) 是显示我的 DrawnObject 的位置。
// Called when button is pushed/clicked
public static void trigger()
{
DrawnObject shape = new DrawnObject();
window.setLayout(new BorderLayout());
window.getContentPane().add(shape, BorderLayout.CENTER);
window.pack;
}
public class DrawnObject extends JComponent()
{
@Override
public Dimension getMinimumSize()
{
return new Dimension(100, 100);
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(500, 500);
}
@Override
public Dimension getMaximumSize()
{
return new Dimension(700, 700);
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(10, 10, 10, 10);
}
}
我尝试将 Graphics 对象转换为 Graphics2D 并使用适当的绘制方法,但这没有帮助。
【问题讨论】:
-
为什么是
invalidate()?您是否尝试过改用revalidate()? -
revalidate()不是JFrame中的方法。 -
您是否尝试将
DrawnObject添加到 JFrames 内容窗格? (window.getContentPane())。此外,您为什么首先使用无效?您的问题可能是您的窗口在您调用invalidate()后具有null布局,因此不会被绘制... -
我习惯使用
invalidate()重新绘制布局和图形,但添加到内容窗格也不起作用。 -
错误出现在您没有显示的代码中 - 考虑发布 SSCCE
标签: java swing layout paintcomponent jcomponent