添加自动调整jPanel的大小

时间:2014-10-05 21:37:31

标签: java swing resize jpanel jscrollpane

我有一个带按钮的文字游戏。单击按钮时,将显示文本。我的文本出现在jPanel内,该jPanel位于jScrollPane中。我希望我的jPanel自动为我的文本行添加更多的垂直空间。我一直在手工做,但耗时多了。无论如何要做到这一点,或者以某种方式打包jPanel。我对此很陌生,所以如果需要任何额外的信息,请帮助我随意提问。感谢。

1 个答案:

答案 0 :(得分: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();
         }
      });
   }
}