간단한 코드를 손으로 만들고 GUI 빌더 NetBeans를 사용하여 문제를 해결하면 Netbeans로 만든 것이 내가 원하는 방식으로 작동합니다. 첨부 된 스크린 샷은 내 앱의 모습입니다. http://postimg.org/image/6c00csqjn/ 내가 탭을 전환하면 MathML의 방정식이 JEuclid 라이브러리로 렌더링됩니다. 코드를 직접 작성하면됩니다.JTabbedPane addTab과 add 간의 차이점
하지만 NetBeans에서 동일한 작업을 수행하는 경우 빌더를 사용하여 GUI를 작성하고 netbeans로 생성 된 작업 이벤트에 렌더링 코드를 작성한 다음 코드가 작동하지 않고 렌더링되지 않습니다. 누군가 제발 버그가 어디 있는지 말해 줄 수 있니? NetBeans에서 Netbeans이 JTabbedPane에 .addTab을 사용하고 있습니다.
이 코드를 읽고 단지 두 가지 방법의 차이가 무엇인지 질문에 대한 답변을 작성하지 않고 어떤 대답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>∫</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);}
}
'stateChanged()'가 언제든지 호출되는지 확인 했습니까? –