2014-04-30 4 views
-1

Netbeans에서 "punten"텍스트 필드에 일련의 숫자 (예 : 7 8 5 4 10 13)를 넣을 수있는 그래픽 인터페이스를 만들고 "ververs"버튼을 그래픽으로 누르십시오 모든 숫자의 라인 차트가 내 패널에 나타납니다. JFrame을 TextField, 버튼 및 패널로 확장 한 클래스 "Gui"를 만들었습니다. 또한 JPanel을 확장하는 클래스 "Grafiek"를 만들었고 이는 "Gui"의 패널과 연결됩니다. 차트는 JFrame에 표시되는 JPanel에 표시됩니다.내 JPanel 사용 중 문제

내가 경험하는 문제는 다음과 같습니다. repaint(); 명령은 paintComponent (Graphics g) 메소드에 가지 않으며 내 개인 변수는 변경되지 않습니다. (Punti와 punti의 길이는 텍스트 상자에 어떤 변수를 넣든 상관없이 1로 유지됩니다.)

누군가 제발 나를 도울 수 있습니까, 저는 며칠 동안이 프로젝트를 진행해 왔습니다.

내 구이 급 :

package grafiek; 

import java.awt.Graphics; 
import javax.swing.JPanel; 

public class Gui extends javax.swing.JFrame { 

private Grafiek newJPanel; 

/** 
* Creates new form Gui 
*/ 
public Gui() { 
    initComponents(); 
    newJPanel = new Grafiek(); 
} 

/** 
* This method is called from within the constructor to initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is always 
* regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

    punten = new javax.swing.JTextField(); 
    fout = new javax.swing.JLabel(); 
    javax.swing.JButton ververs = new javax.swing.JButton(); 
    panel = new Grafiek(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    fout.setText("j"); 

    ververs.setText("Ververs"); 
    ververs.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      verversActionPerformed(evt); 
     } 
    }); 

    panel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0), 2)); 

    javax.swing.GroupLayout panelLayout = new javax.swing.GroupLayout(panel); 
    panel.setLayout(panelLayout); 
    panelLayout.setHorizontalGroup(
     panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 0, Short.MAX_VALUE) 
    ); 
    panelLayout.setVerticalGroup(
     panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 195, Short.MAX_VALUE) 
    ); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
       .addComponent(panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(punten, javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() 
        .addComponent(ververs) 
        .addGap(6, 6, 6) 
        .addComponent(fout) 
        .addGap(0, 302, Short.MAX_VALUE))) 
      .addContainerGap()) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(punten, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(18, 18, 18) 
      .addComponent(panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addGap(18, 18, 18) 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(fout) 
       .addComponent(ververs)) 
      .addContainerGap()) 
    ); 

    pack(); 
}// </editor-fold>       

private void verversActionPerformed(java.awt.event.ActionEvent evt) {           
    newJPanel.verwerkData(punten.getText()); 
}          

/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 
    /* Set the Nimbus look and feel */ 
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
    * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
    */ 
    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(Gui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(Gui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(Gui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(Gui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 
    //</editor-fold> 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new Gui().setVisible(true); 
     } 
    }); 
} 

// Variables declaration - do not modify      
private javax.swing.JLabel fout; 
private javax.swing.JPanel panel; 
private javax.swing.JTextField punten; 
// End of variables declaration     
} 

내 Grafiek 급 : 내가 볼

package grafiek; 

import java.awt.Graphics; 

public class Grafiek extends javax.swing.JPanel { 

private String[] punt; 
private int[] punti; 
private int afstandX, afstandY, puntX1, puntY1, puntX2, puntY2; 
private int max; 

/** 
* Creates new form Grafiek 
*/ 
public Grafiek() { 
    initComponents(); 
    punt = new String[1]; 
    punti = new int[1]; 
    afstandX = 0; 
    afstandY = 0; 
    puntX1 = 0; 
    puntY1 = 0; 
    puntX2 = 0; 
    puntY2 = 0; 
    max = 1; 
} 

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    for(int i=0; i<punti.length; i++) { 
     if(max <= punti[i]) { 
      max = punti[i]; 
     } 
    } 

    afstandX = getWidth()/punt.length; 
    afstandY = getHeight()/max; 

    for(int i=0; i<punti.length; i++) { 
     puntX1 = puntX2; 
     if(i == 0) { 
      puntY1 = getHeight(); 
     } 
     else puntY1 = puntY2; 
     puntX2 += afstandX; 
     puntY2 = getHeight() - punti[i]*afstandY; 

     g.drawLine(puntX1, puntY1, puntX2, puntY2); 
    } 

    puntX2 = 0; 
} 

public void verwerkData(String s) { 
    punt = s.split(" "); 

    punti = new int[punt.length]; 

    for(int i=0; i<punt.length; i++) { 
     punti[i] = Integer.parseInt(punt[i]); 
    } 

    repaint(); 
} 

/** 
* This method is called from within the constructor to initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is always 
* regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

    setBackground(new java.awt.Color(255, 255, 255)); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); 
    this.setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 400, Short.MAX_VALUE) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 300, Short.MAX_VALUE) 
    ); 
}// </editor-fold>       

} 

답변

0

하나의 문제는 당신이 객체가 인스턴스화

newJPanel = new Grafiek(); 

인 선언해야한다는 것입니다 액션 메소드를 호출하는 사람

private void verversActionPerformed(java.awt.event.ActionEvent evt) {           
    newJPanel.verwerkData(punten.getText()); 
} 

그러나 newJPanel은 프레임에 추가되지 않습니다. 이 프레임에 추가되는 것처럼 보이는 객체는 initComponents()

panel = new Grafiek(); 

이다.

panel.verwerkData(punten.getText()); 

newJPanel.verwerkData(punten.getText()); 

을 변경해보십시오 그리고 당신은

그것을 사용하지 않을 때문에 newJpanel 제거