簡體   English   中英

Java繪圖到JPanel(調試)

[英]Java Drawing to a JPanel (debugging)

我正在嘗試向JPanel繪制基本對象,盡管它似乎不起作用。

我敢肯定我在調用paint方法的地方做錯了

import javax.swing.*;
import java.awt.*;
import java.awt.image.*;

public class testGui {

   static colors   gc_colors;
   static gui      gc_gui;

   public static void main(String[] args) {

      gc_colors = new colors();
      gc_gui = new gui();

      gc_gui.cv_frame.setVisible(true);

   }

   public static class colors {

      Color   cv_ltGrey;
      Color   cv_mdGrey;
      Color   cv_dkGrey;

      public colors() {

         cv_ltGrey = Color.decode("#DDDDDD");
         cv_mdGrey = Color.decode("#CCCCCC");
         cv_dkGrey = Color.decode("#111111");

      }

   }

   public static class gui {

      JFrame   cv_frame;
      JPanel   cv_panel;
      JPanel   cv_content;

      public gui() {

         cv_frame = new JFrame();
         cv_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         cv_frame.setTitle("Test GUI");
         cv_frame.setSize(600, 400);
         cv_frame.setLayout(new FlowLayout());

         cv_panel = new JPanel();
         cv_panel.setBackground(gc_colors.cv_ltGrey);
         cv_panel.setPreferredSize(new Dimension(500, 300));

         cv_frame.add(cv_panel);

         cv_content = new content();
         cv_panel.add(cv_content);

      }

   }

   public static class content extends JPanel {

      public void paint(Graphics graphic) {
         super.paint(graphic);
         draw(graphic);
      }

      public void update() {
         repaint();
      }

      public void draw(Graphics graphic) {

         Graphics2D graphic2D = (Graphics2D) graphic;
         graphic2D.setPaint(gc_colors.cv_ltGrey);
         graphic2D.fillRect(10, 10, 100, 100);

      }

   }

}

我有一個針對gui的類,我要為其添加一個JPanel(淺灰色的)。 然后,我嘗試使用一個名為content的JPanel擴展類將其添加到圖形中。

當我運行它時,雖然它似乎創建了我想要的灰色JPanel,但是圖形只是一個很小的白色正方形,我不確定為什么。

因此, content面板的默認首選大小為0x0FlowLayout接受其組件的preferredSize (略有空白),因此這是您擁有一個漂亮的小白色矩形的原因。

您需要做的是重寫content面板的getPreferredSize方法並返回合適的大小,例如

例

public static class content extends JPanel {

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(120, 120);
    }

    public void paint(Graphics graphic) {
        super.paint(graphic);
        draw(graphic);
    }

    public void update() {
        repaint();
    }

    public void draw(Graphics graphic) {

        Graphics2D graphic2D = (Graphics2D) graphic;
        graphic2D.setPaint(gc_colors.cv_ltGrey);
        graphic2D.fillRect(10, 10, 100, 100);

    }

}

我決定完全不使用第二個JPanel。 將JPanel放入另一個JPanel太麻煩了,所以我只打算使用單個JPanel

  public static class gui {

  JFrame   cv_frame;
  JPanel   cv_panel;
  JPanel   cv_content;

  public gui() {

     cv_frame = new JFrame();
     cv_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     cv_frame.setTitle("Test GUI");
     cv_frame.setSize(600, 400);
     cv_frame.setLayout(new FlowLayout());

     cv_content = new content();
     cv_content.setBackground(gc_colors.cv_ltGrey);
     cv_content.setPreferredSize(new Dimension(500, 300));
     cv_frame.add(cv_content);

  }

  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM