StackExchangeのWebサイトを使用するのは今回が初めてなので、どうなるか見てみましょう。
そのため、私はJavaで「ローカル」チャットプログラムを作成しており、チャット入力にJTextFieldを使用していました。しかし、複数行のチャットを許可したかったので、JTextAreaに切り替えました。ウィンドウ/コンポーネントのサイズ変更を簡単にするために、GroupLayout(Window Builder Pro-eclipseで構築)を使用しています。ここに写真があります:
JTabbedPane、JTextArea、および送信ボタンはすべてJPanelに含まれており、左側にあるものはすべて独自のJPanelに含まれています。つまり、JTextAreaとボタンが右側のJPanelの下部にドッキングされています。JTextAreaは垂直方向にサイズ変更できますが、ボタンはそうではありません。新しい行を入力すると、JTextAreaを垂直方向に成長させることができました。以下に示します。
But I'm unable to think up a way so that if I enter a certain amount of lines into the JTextArea, scrollbars will appear and prevent the JTextArea from taking up any more space. So I tried wrapping the JTextArea in a JScrollPane but disable to scrollbars initially and then enable them when I needed the JTextArea to start scrolling, but I learned that if I wrap it, the JScrollPane won't grow but will still act like it would with the scrollbars visible but... without them. :/
** I wanted to put a link here, but StackOverflow doesn't like me ;)
だから、私はちょっと行き詰まっています...これを欠いている何かがありますか?私は2つの異なるGroupLayoutオブジェクトを作成できると考えていました。1つはスクロールペインが無効であり、もう1つは有効なスクロールペインで特定のサイズのままです。keyPressリスナーで、テキスト領域が特定の制限を超えているかどうかを確認してから、パネルのレイアウトを切り替えることができますか?内部のJTextAreaは同じオブジェクトですが、異なるレイアウトオブジェクトです。そのアプローチについての意見?
とにかく、これに答えるために時間を割いてくれたすべての人に前もって感謝します。:)
Swingコントロールのみを使用して、JTextAreaを最大4行にサイズ変更する小さなプログラムを作成しました
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class ResizeTextArea {
public static final int CHAT_ROW_LIMIT = 4;
public static void main(String[] args) {
JPanel topPanel = new JPanel();
topPanel.setPreferredSize(new Dimension(200, 200));
topPanel.setBackground(Color.WHITE);
final JTextArea chatArea = new JTextArea();
final JScrollPane scrollPane = new JScrollPane(chatArea);
final JPanel mainPanel = new JPanel(new BorderLayout(5,5));
mainPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
mainPanel.add(topPanel, BorderLayout.CENTER);
mainPanel.add(scrollPane, BorderLayout.SOUTH);
chatArea.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
updateLineCount();
}
@Override
public void removeUpdate(DocumentEvent e) {
updateLineCount();
}
@Override
public void changedUpdate(DocumentEvent e) {
updateLineCount();
}
private void updateLineCount() {
int lineCount = chatArea.getLineCount();
if (lineCount <= CHAT_ROW_LIMIT) {
chatArea.setRows(lineCount);
mainPanel.revalidate();
}
}
});
JFrame f = new JFrame("ResizeTextArea");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(mainPanel);
f.pack();
f.setVisible(true);
}
}
以下は、1行、4行、8行の検索方法です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加