2014-03-13 2 views
0

간단한 코드를 손으로 만들고 GUI 빌더 NetBeans를 사용하여 문제를 해결하면 Netbeans로 만든 것이 내가 원하는 방식으로 작동합니다. 첨부 된 스크린 샷은 내 앱의 모습입니다. http://postimg.org/image/6c00csqjn/ 내가 탭을 전환하면 MathML의 방정식이 JEuclid 라이브러리로 렌더링됩니다. 코드를 직접 작성하면됩니다.JTabbedPane addTab과 add 간의 차이점

하지만 NetBeans에서 동일한 작업을 수행하는 경우 빌더를 사용하여 GUI를 작성하고 netbeans로 생성 된 작업 이벤트에 렌더링 코드를 작성한 다음 코드가 작동하지 않고 렌더링되지 않습니다. 누군가 제발 버그가 어디 있는지 말해 줄 수 있니? NetBeans에서 Netbeans이 JTabbedPane에 .addTab을 사용하고 있습니다.

이 코드를 읽고 단지 두 가지 방법의 차이가 무엇인지 질문에 대한 답변을 작성하지 않고 어떤 대답

enter image description here

import java.awt.BorderLayout; 
import java.awt.Container; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JSpinner; 
import javax.swing.JTabbedPane; 
import javax.swing.JTextArea; 
import javax.swing.event.ChangeEvent; 

import net.sourceforge.jeuclid.swing.JMathComponent; 

public class MathMLTabbed extends JFrame{ 
    private JTextArea formulaSource; 
private JPanel drawingArea, editorArea; 
    private JSpinner spinner; 
    private JTabbedPane zalozky; 

public MathMLTabbed() { 
    this.setTitle("MathML Example"); 
    this.setSize(500, 500); 
      setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
    Container content = getContentPane();    

    this.formulaSource = new JTextArea(); 
    editorArea = new JPanel(); 
    editorArea.setLayout(new BorderLayout()); 
    editorArea.add(new JScrollPane(this.formulaSource),BorderLayout.CENTER); 
      editorArea.add(spinner = new JSpinner(),BorderLayout.NORTH); 
      spinner.setValue(18); 

      drawingArea = new JPanel(); 

      zalozky = new JTabbedPane(); 
      zalozky.addTab("MathML vstup", editorArea); 
      zalozky.addTab("Vzorec", new JScrollPane(drawingArea)); 
    content.add(zalozky); 

    zalozky.addChangeListener(new javax.swing.event.ChangeListener() { 

       @Override 
       public void stateChanged(ChangeEvent e) { 
        if(zalozky.getSelectedIndex() == 0) 
         drawingArea.removeAll(); 
        if(zalozky.getSelectedIndex() == 1) 
         render(); 
       } 
      }); 

      String retezec = "<?xml version=\"1.0\"?>\r\n" + 
        "<!DOCTYPE math PUBLIC \"-//W3C//DTD MathML 2.0//EN\" \"http://www.w3.org/TR/MathML2/dtd/mathml2.dtd\">\r\n" + 
        "<math mode=\"display\">\r\n" + 
        " <mrow>\r\n" + 
        " <munderover>\r\n" + 
        "  <mo>&#x222B;</mo>\r\n" + 
        "  <mn>1</mn>\r\n" + 
        "  <mi>x</mi>\r\n" + 
        " </munderover>\r\n" + 
        " <mfrac>\r\n" + 
        "  <mi>dt</mi>\r\n" + 
        "  <mi>t</mi>\r\n" + 
        " </mfrac>\r\n" + 
        " </mrow>\r\n" + 
        "</math>"; 

      formulaSource.setText(retezec); 
} 

    public void render() {  
     // get the text 
     String latex = formulaSource.getText();   
     // create a formula 
     JMathComponent formula = new JMathComponent();      
        drawingArea.add(formula); 
        formula.setFontSize((int)spinner.getValue()); 
        formula.setContent(latex); 



} 

    public static void main(String[] args) { 
    MathMLTabbed frame = new MathMLTabbed();   
    frame.setVisible(true);}  
} 
+0

'stateChanged()'가 언제든지 호출되는지 확인 했습니까? –

답변

0

주셔서 감사합니다, 여기에 방법에 대한 문서입니다 :

  1. add()
  2. addTab()

둘 다 insertTab()의 표지 방법입니다.

+0

둘 다 삽입 방법을 알고 있지만 netbeans 코드 (필자는 필요할 경우 첨부 할 수 있음)를 광산과 비교했지만 어디에 버그가 있는지 찾을 수 없습니다 – user3355244