这个简单的代码问题

时间:2009-09-08 21:27:23

标签: java

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MyDrawPanel extends JPanel{
    public void paintComponents(Graphics g){
        g.setColor(Color.orange);
        g.fillRect(20,50,100,100);
    }
    public static void main(String[] args){
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.getContentPane().add(paintComponents(g));
        frame.setVisible(true);
    }
}

我想我应该在frame.getContentPane().add(paintComponents(g));中添加一些参数。 我查了Graphics课,但我还是在努力学习。应该是什么参数?

3 个答案:

答案 0 :(得分:3)

试试这个

public class MyDrawPanel extends JPanel{
    MyDrawPanel()
         {
         setOpaque(true);
         }


    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setColor(Color.orange);
        g.fillRect(20,50,100,100);
    }
    public static void main(String[] args){

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().add(new MyDrawPanel());
        frame.setBounds(10,10,500, 500);
        frame.setVisible(true);
    }

}

答案 1 :(得分:0)

我不是专家,但我认为你想要做的是从JFrame向你的内容窗格添加一个Canvas对象,然后在其上绘制一个Graphics对象。

答案 2 :(得分:0)

好的,这就是我想出来的:

public class MyDrawPanel extends JPanel
{
  private static void createAndShowGUI()
  {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 500);
    MyDrawPanel panel = new MyDrawPanel();
    panel.setOpaque(true);
    frame.getContentPane().add(panel);
    frame.setVisible(true);
  }

  @Override
  public void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    g.setColor(Color.orange);
    g.fillRect(20,50,100,100);
  }

  public static void main(String[] args)
  {
    SwingUtilities.invokeLater(new Runnable() {

      @Override
      public void run()
      {
        createAndShowGUI();
      }
    });

  }

}

注意:

  1. 您的行frame.getContentPane().add(paintComponents(g));存在多个问题。你所说的是“在paintComponents上调用g的结果添加到内容窗格。g来自哪里?在声明之前你不能使用变量。调用的结果是{ {1}}是paintComponents,这意味着结果不能用作方法的参数。大概你有编译错误。

  2. 我将void更改为paintComponents。前者用于控制子组件的绘制,一般不应该被覆盖。

  3. 不应在主线程上创建Swing对象。对于初学者来说,细节很复杂(详细描述了here)。大多数情况下,您只需记住上面使用的paintComponent模式。