【问题标题】:Can't draw to JPanel with getGraphics无法使用 getGraphics 绘制到 JPanel
【发布时间】:2013-11-12 07:07:52
【问题描述】:

我想知道出了什么问题。我以前做过这个,但由于某种原因,这次我不能让它工作。

我在 Netbeans 中设计了这个项目。最相关的部分是 initTiras 方法,它应该绘制一些东西,但它没有。我包含了 NetBeans 生成的代码。

这是最简化的代码版本,但它仍然没有绘制任何内容。

所以我在项目中创建了一个新框架。然后我在里面放了一个JPanel(在设计模式下)。 JPanel 称为 ElPanel 和 JFrame LaFrame。

这是主要的类:

package ElPackage;
public class Resistores {
    public static void main(String[] args) {
        LaFrame UnaFrame = new LaFrame();
        UnaFrame.setVisible(true);
    }   
}

在 LaFrame 类内部:

package ElPackage;

import java.awt.Color;
import java.awt.Graphics;

public class LaFrame extends javax.swing.JFrame {
    public LaFrame () {
        initComponents();
        initTiras();
    }

    public void initTiras() {
        Graphics LasG = ElPanel.getGraphics();
        LasG.setColor(Color.WHITE);
        LasG.fillRect(10, 10, 30, 30);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        ElPanel = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setResizable(false);

        ElPanel.setBackground(new java.awt.Color(51, 0, 51));
        ElPanel.setForeground(new java.awt.Color(255, 255, 255));

        javax.swing.GroupLayout ElPanelLayout = new javax.swing.GroupLayout(ElPanel);
        ElPanel.setLayout(ElPanelLayout);
        ElPanelLayout.setHorizontalGroup(
            ElPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        ElPanelLayout.setVerticalGroup(
            ElPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(ElPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(ElPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        
    // Variables declaration - do not modify                     
    private javax.swing.JPanel ElPanel;
    // End of variables declaration                   
}

【问题讨论】:

    标签: java swing netbeans graphics jpanel


    【解决方案1】:

    覆盖elPanel 的paintComponent(Graphics g) 方法并在那里添加您的代码。见for example

    使用 java 命名约定 - 变量应以小写字母开头。

    【讨论】:

    • 阅读 Custom Painting 上的 Swing 教程。我发现本教程在解释自定义绘画的工作原理方面做得更好,这是一个在网络上找到的简单示例。
    • 非常感谢两位,教程我看完了。但它不应该按照我使用的方式工作吗?我的意思是,它曾经工作过一次,我不知道为什么,但它在另一个项目中确实有效,我在 JFrame 的代码中管理 JPanel 的图形。
    猜你喜欢
    • 2018-03-18
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    相关资源
    最近更新 更多