2013-11-12 3 views
0

Мне было интересно, что пошло не так. Я сделал это раньше, но по какой-то причине я не могу заставить это работать на этот раз.Невозможно нарисовать JPanel с getGraphics

Я разработал проект в Netbeans. Самой важной частью является метод initTiras, который, как предполагается, что-то нарисовал, но это не так. Я включил код, созданный NetBeans.

Вот самая упрощенная версия кода, и все же она ничего не рисует.

Так что я создал новый кадр в проекте. Затем я помещаю JPanel в него (в режиме desing). 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     
} 

ответ

3

Override paintComponent(Graphics g) метод elPanel и добавить свой код. См. for example

Использовать соглашение об именах java - переменные должны начинаться с буквы нижнего регистра.

+1

Прочтите учебник Swing в [Custom Painting] (http://docs.oracle.com/javase/tutorial/uiswing/painting/index.html). Я нахожу, что учебник лучше справляется с объяснением того, как работает обычная роспись, которая делает простой пример, найденный в Интернете. – camickr

+0

Спасибо вам большое, я закончил читать учебник. Но разве он не работал так, как я его использовал? Я имею в виду, что он работал один раз, я точно не знаю, почему, но это произошло в другом проекте, где мне удалось создать графику JPanel в коде JFrame. – unPez

Смежные вопросы