Java 添加文本时自动调整jPanel的大小

Java 添加文本时自动调整jPanel的大小,java,swing,resize,jpanel,jscrollpane,Java,Swing,Resize,Jpanel,Jscrollpane,我有一个有按钮的文字游戏。单击按钮时,将显示文本。我的文本显示在jPanel中,jPanel位于jScrollPane中。我想我的jPanel自动为我的文本行添加更多的垂直空间。我一直都是手工做的,但是要花很多时间。有没有办法做到这一点,或者可能会打包一个jPanel。我是个新手,所以如果你需要任何额外的信息来帮助我,请随时询问。谢谢。我会使用一个可以自动完成这项工作的组件——JTextArea。当添加更多文本时,它将自动放大 如果您需要更具体的帮助或代码示例,请发布您自己的小型可编译和可运行测

我有一个有按钮的文字游戏。单击按钮时,将显示文本。我的文本显示在jPanel中,jPanel位于jScrollPane中。我想我的jPanel自动为我的文本行添加更多的垂直空间。我一直都是手工做的,但是要花很多时间。有没有办法做到这一点,或者可能会打包一个jPanel。我是个新手,所以如果你需要任何额外的信息来帮助我,请随时询问。谢谢。

我会使用一个可以自动完成这项工作的组件——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();
         }
      });
   }
}

我会使用一个可以自动完成这项工作的组件——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();
         }
      });
   }
}

我会使用一个可以自动完成这项工作的组件——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();
         }
      });
   }
}

我会使用一个可以自动完成这项工作的组件——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();
         }
      });
   }
}

我不想使用JTextArea,因为我不希望用户能够突出显示或删除最初存在的任何文本。我一直在使用jLabel,它等于
,当按下一个按钮时,jLabel会被赋予一个新的值。因此,我还没有用JTextArea测试过任何东西(尽管我会),但是否还有其他功能可以改变,比如JTextArea的颜色,以及加粗某些文本区域的能力?如果是这样的话,我可能可以使它与我已有的完全相同。@MattSpiller不允许用户选择文本是一个奇怪的要求,IMHO-用不可编辑的文本组件替换我们的任何标签使我们的许多客户非常高兴,因为他们现在可以从我们的程序中复制一系列文本,以满足许多不同的需要。不能说我一开始就认为它很有用,但用户们都快发疯了……我不想使用JTextArea,因为我不想让用户能够突出显示或删除最初存在的任何文本。我一直在使用jLabel,它等于
,当按下一个按钮时,jLabel会被赋予一个新的值。因此,我还没有用JTextArea测试过任何东西(尽管我会),但是否还有其他功能可以改变,比如JTextArea的颜色,以及加粗某些文本区域的能力?如果是这样的话,我可能可以使它与我已有的完全相同。@MattSpiller不允许用户选择文本是一个奇怪的要求,IMHO-用不可编辑的文本组件替换我们的任何标签使我们的许多客户非常高兴,因为他们现在可以从我们的程序中复制一系列文本,以满足许多不同的需要。不能说我一开始就认为它很有用,但用户们都快发疯了……我不想使用JTextArea,因为我不想让用户能够突出显示或删除最初存在的任何文本。我一直在使用jLabel,它等于
,当按下一个按钮时,jLabel会被赋予一个新的值。因此,我还没有用JTextArea测试过任何东西(尽管我会),但是否还有其他功能可以改变,比如JTextArea的颜色,以及加粗某些文本区域的能力?如果是这样的话,我可能可以使它与我已有的完全相同。@MattSpiller不允许用户选择文本是一个奇怪的要求,IMHO-用不可编辑的文本组件替换我们的任何标签使我们的许多客户非常高兴,因为他们现在可以从我们的程序中复制一系列文本,以满足许多不同的需要。不能说我一开始就认为它很有用,但用户们都快发疯了……我不这么认为