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