2014-10-05 60 views
0

我有一個帶按鈕的文本遊戲。當點擊一個按鈕時,文本出現。我的文本出現在jPanel中,它位於jScrollPane中。我希望我的jPanel自動爲我的文本行添加更多垂直空間。我一直在用手工做,但這耗費更多時間。無論如何要做到這一點,或者可能以某種方式包裝jPanel。我對此很新,所以如果有任何額外的信息需要你幫助我隨時提問。謝謝。添加文本時自動調整jPanel的大小

回答

3

我會使用一個可以自動執行此操作的組件 - 一個JTextArea。隨着更多文本的添加,它會自動放大。

如果您需要更具體的幫助或代碼示例,請發佈您自己的小型可編譯和可運行測試示例程序,我可以嘗試修改它。


幽州:

我不想使用一個JTextArea,因爲我不希望用戶能夠突出或刪​​除任何在那裏的第一個文本地點。

沒問題。只要使JTextArea不可聚焦和不可編輯。

我一直在使用等於「」的jLabel,當按下按鈕時,該jLabel被賦予一個新的值。

嘗試是這樣的:

import java.awt.event.ActionEvent; 
import java.awt.event.KeyEvent; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class AddNewLines extends JPanel { 
    private JTextArea textArea = new JTextArea(10, 15); 
    private JButton addLineBtn = new JButton(new AddLineAction("Add Line", KeyEvent.VK_A)); 

    public AddNewLines() { 
     textArea.setEditable(false); 
     textArea.setFocusable(false); 
     textArea.setWrapStyleWord(true); 
     textArea.setLineWrap(true); 
     textArea.setOpaque(false); 

     JScrollPane scrollPane = new JScrollPane(textArea); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 

     add(scrollPane); 
     add(addLineBtn); 

    } 

    class AddLineAction extends AbstractAction { 
     private int count = 0; 
     public AddLineAction(String name, int mnemonic) { 
     super(name); 
     putValue(MNEMONIC_KEY, mnemonic); 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
     if (count != 0) { 
      textArea.append("\n"); 
     } 
     textArea.append("Line of Text: " + count); 
     count++; 
     } 
    } 

    private static void createAndShowGui() { 
     AddNewLines mainPanel = new AddNewLines(); 

     JFrame frame = new JFrame("Add New Lines"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 
+0

我不想使用一個JTextArea,因爲我不希望用戶能夠突出或刪​​除任何在那裏的文本第一名。我一直在使用與''「'相等的jLabel,當按下按鈕時,該jLabel被賦予一個新的值。 – MattS 2014-10-05 22:07:30

+0

@MattSpiller:請參閱編輯來回答。 – 2014-10-05 22:18:11

+0

所以我還沒有測試任何與JTextArea(儘管我會)但無論如何改變其他功能,如JTextArea的顏色,還有大膽的某些區域的文本的能力?如果是這樣,我可以使它與我已有的一致。 – MattS 2014-10-05 22:29:03