2010-02-19 3 views
1

Приведенная ниже программа вставляет новую кнопку JTextArea при нажатии кнопки. Каждый новый TextArea вставляется в новую строку. Программа отлично работает на машине Linux, но не на машине Windows. На машине Windows это дает мне BadLocationException. Может кто-нибудь скажет мне решение этой проблемы. Заранее спасибо.Java Swing - компонент для вставок проблем в JTextPane

import javax.swing.JTextArea; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.StyledDocument; 

public class TestPane extends javax.swing.JFrame { 

/** Creates new form TestPane */ 
StyledDocument doc = null; 
public TestPane() { 
    initComponents(); 
    doc = jTextPane1.getStyledDocument(); 
    //BoxLayout messageLayout = new BoxLayout(jScrollPane1,BoxLayout.PAGE_AXIS); 
    //jTextPane1.setLayout(messageLayout); 
} 

/** 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() { 

    jButton1 = new javax.swing.JButton(); 
    jScrollPane1 = new javax.swing.JScrollPane(); 
    jTextPane1 = new javax.swing.JTextPane(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jButton1.setText("jButton1"); 
    jButton1.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jButton1ActionPerformed(evt); 
     } 
    }); 

    jScrollPane1.setViewportView(jTextPane1); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
     .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(layout.createSequentialGroup() 
        .addGap(164, 164, 164) 
        .addComponent(jButton1)) 
       .addGroup(layout.createSequentialGroup() 
        .addContainerGap() 
        .addComponent(jScrollPane1, 
         javax.swing.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE))) 
      .addContainerGap()) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 
       286, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(jButton1) 
      .addContainerGap(31, Short.MAX_VALUE)) 
    ); 

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

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    // TODO add your handling code here: 
    jTextPane1.insertComponent(new JTextArea("hi this is StackOverflow ")); 
    jTextPane1.revalidate(); 
    insertEmptyLable(); 
} 


private void insertEmptyLable() { 
    try { 
     doc.insertString 
       (jTextPane1.getText().length(), "\n", 
       null); 
    } catch (BadLocationException ex) { 
     ex.printStackTrace(); 
    } 
} 
/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new TestPane().setVisible(true); 
     } 
    }); 
} 

// Variables declaration - do not modify 
    private javax.swing.JButton jButton1; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JTextPane jTextPane1; 
// End of variables declaration 
} 
+0

Можете ли вы опубликовать трассировку стека? – trashgod

ответ

1

ли вы на самом деле означает сделать insertComponent() каждый раз, когда actionPerformed() вызывается? Я бы ожидал чего-то больше, как это:

private void insertMessage() { 
    try { 
     doc.insertString(jTextPane1.getText().length(), 
      "Hi, this is StackOverflow.\n", null); 
    } catch (BadLocationException ex) { 
     ex.printStackTrace(); 
    } 
} 

Добавление: Сравнивая это с вашим previous question на ту же тему, вы должны рассмотреть вопрос, хотите ли вы, чтобы вставить текст или компонент текста на в панели прокрутки , Кроме того, дизайнер GUI NetBeans созрел значительно, но он не поддается кратким примерам.