簡體   English   中英

在Jpanel中繪制矩形

[英]draw rectangle in Jpanel

我試圖在java中進行GUI編程,並希望在Jpanel中繪制一個矩形。 代碼沒有給出任何錯誤,但我無法在GUI中獲得矩形。 有人可以告訴我以下代碼中缺少的內容。 我相信這很簡單,所以請保持溫柔。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class HelloWorldGUI2 {

    private static class ButtonHandler implements ActionListener {
        public void actionPerformed(ActionEvent e) {
        System.exit(0);
        }
        }
    private static class RectDraw extends JPanel {
        public void paintComponent(Graphics g) {
        super.paintComponent(g);  
         g.drawRect(230,80,10,10);  
         g.setColor(Color.RED);  
         g.fillRect(230,80,10,10);  
        }
        }
    public static void main(String[] args) {
        JPanel content = new JPanel();
        RectDraw newrect= new RectDraw();
        JButton okButton= new JButton("OK");
        JButton clearButton= new JButton("Clear");
        ButtonHandler listener= new ButtonHandler();
        okButton.addActionListener(listener);
        clearButton.addActionListener(listener);
        content.add(okButton);
        content.add(clearButton);
        content.add(newrect);
        JFrame window = new JFrame("GUI Test");
        window.setContentPane(content);
        window.setSize(250,100);
        window.setLocation(100,100);
        window.setVisible(true);
        }

    }

你的newrect RectDraw的大小可能會非常小,可能是[0,0],因為它已經使用JPanel添加到FlowLayout並且沒有設置preferredSize。 考慮重寫其getPreferredSize()方法並返回合適的Dimension,以便可以看到它的繪圖。

private static class RectDraw extends JPanel {
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);  
    g.drawRect(230,80,10,10);  
    g.setColor(Color.RED);  
    g.fillRect(230,80,10,10);  
  }

  public Dimension getPreferredSize() {
    return new Dimension(PREF_W, PREF_H); // appropriate constants
  }
}

也,

  • paintComponent方法應該受到保護,而不是公共
  • 在方法@Override之前,不要忘記使用@Override
  • 瞄准的主要方法更少的代碼和更多的代碼在“實例”的世界,而不是靜態的世界。
  • 注意代碼格式。 糟糕的代碼格式化,特別是誤導性的縮進,會導致愚蠢的錯誤。

我試圖在java中使用GUI編程

然后你應該先閱讀Swing教程

對於這個問題,您可以從自定義繪畫部分開始。

本教程不僅向您展示了一個工作示例,而且還向您展示了如何通過在EDT上執行代碼來正確創建框架。 有關更多信息,請閱讀Concurrency部分。

暫無
暫無

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

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