Java 为什么这个图形组件不工作?
我试图在“Graphics”类中绘制一个矩形,但由于某些原因,该矩形没有出现,但程序没有返回任何错误。我以前从未遇到过这样的问题,所以我很困惑 Main() 图形() 气垫船编辑Java 为什么这个图形组件不工作?,java,paintcomponent,Java,Paintcomponent,我试图在“Graphics”类中绘制一个矩形,但由于某些原因,该矩形没有出现,但程序没有返回任何错误。我以前从未遇到过这样的问题,所以我很困惑 Main() 图形() 气垫船编辑 import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class Main { public Main() { JFrame window =
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Main
{
public Main()
{
JFrame window = new JFrame();
Sound soundCall = new Sound();
Draw drawCall = new Draw();
final JPanel container = new JPanel();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().add(drawCall);
window.setSize(600, 400);
window.setLocationRelativeTo(null);
window.setVisible(true);
window.setResizable(false);
}
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new Main();
}
});
}
}
通过添加这个window.getContentPane().add(drawCall)
要求我将drawCall
更改为组件
编辑2:
public class Draw
{
public class Graphics extends JPanel
{
public void paintComponent(java.awt.Graphics g)
{
super.paintComponent(g);
g.setColor(Color.GRAY);
g.drawRect(0, 0, 500, 500);
}
}
}
错误
类型容器中的add(Component)方法不适用于参数(Draw)
如果将graphicsCall变量添加为nothing,则不会显示该变量。解决方案:将它添加到一个容器中,比如刚刚创建的JPanel,或者直接添加到JFrame的contentPane中
i、 例如,改变这一点:
JFrame window = new JFrame();
Sound soundCall = new Sound();
Graphics graphicsCall = new Graphics();
final JPanel container = new JPanel();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().add(container);
为此:
JFrame window = new JFrame();
Sound soundCall = new Sound();
Graphics graphicsCall = new Graphics();
// final JPanel container = new JPanel();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().add(soundCall);
另一方面,您需要将该类从图形重新命名为其他名称,否则您可能会混淆自己或编译器,因为已经存在一个具有该名称的关键Java类
另外,避免使用setSize(…)
。最好让您的图形JPanel覆盖getPreferredSize()
,并在JFrame上调用pack()
编辑
根据MadProgrammer敏锐的观察,您的绘图超出了组件的边界
编辑2
关于您的最新代码,请注意:
public class Draw
{
public class Graphics extends JPanel
{
public void paintComponent(java.awt.Graphics g)
{
super.paintComponent(g);
g.setColor(Color.GRAY);
g.drawRect(0, 0, 500, 500);
}
}
}
他是无用的德瑞克。为什么不必要地将类包装在类中?相反,为什么不简单地:
public class Draw extends JPanel {
public void paintComponent(java.awt.Graphics g)
{
super.paintComponent(g);
g.setColor(Color.GRAY);
g.drawRect(0, 0, 500, 500);
}
@Override
public Dimension getPreferredSize() {
// return an appropriate Dimension here
}
}
@HarryKitchener:如果你尝试了某件事情,但它不起作用,你会想把这个尝试显示为对你的问题的编辑,并用你的新代码描述你的问题。另请参见编辑以回答。OP正在绘制超出组件可见边界的矩形<代码>g.drawRect(500500500500)代码>。建议类似于
g.drawRect(0,0500500)代码>作为主要测试,我还建议g.setColor(Color.RED)代码>超过g.setColor(颜色.灰色)因为这可能是面板背景的颜色,以防万一…@MadProgrammer:你当然是对的。这应该是一个答案。@HovercraftFullOfEels您已经涵盖了其余的内容,只需要添加这些内容就可以完成它;)我犯了那个愚蠢的错误。但是现在如果您看到上面的编辑,我在下得到一个错误。添加
public class Draw
{
public class Graphics extends JPanel
{
public void paintComponent(java.awt.Graphics g)
{
super.paintComponent(g);
g.setColor(Color.GRAY);
g.drawRect(0, 0, 500, 500);
}
}
}
public class Draw extends JPanel {
public void paintComponent(java.awt.Graphics g)
{
super.paintComponent(g);
g.setColor(Color.GRAY);
g.drawRect(0, 0, 500, 500);
}
@Override
public Dimension getPreferredSize() {
// return an appropriate Dimension here
}
}