如果是可以用鼠标可以拉动的jTextPane也可以!!!!!!!!!
解决方案 »
- 最近面试被问道的一个问题
- 在java中 (‘m’ + 4 )的结果为什么是 一个字符 ??
- java如何读取解析指定位数的二进制流
- GregorianCalendar指定月份之后,能取得相应月份的英文表示吗.
- java模拟c中的realloc(),周二晚上就要交作业,达人们帮忙
- 和大厅服务器(Hall Server)的Socket连接保持长连接还是短连接
- 当前流行的J2EE WEB应用架构分析
- msn病毒,救命啊。
- java Aplet插件在HTML上无法显示是什么原因呢?
- 那里有JAVA文档下载呀!
- 在java中有没有数据库控件,例如jdbTable,但是是以ResultSet作为参数?
- JAVA中有没有放doc或者pdf文件的容器???
指定大小,文字不能超出边框?
而且你的第二个要求有问题,既然指定了大小,怎么增行减行啊。
/**
クラス名 RelTextArea.java
*/
import java.awt.event.FocusEvent;
import java.awt.AWTEvent;
import javax.swing.JTextArea;
import javax.swing.text.PlainDocument;
import java.util.Hashtable;
import java.awt.im.InputSubset;
import javax.swing.text.*;
import java.lang.*;
import java.util.*;/**
* 複行用のJtextAreaでRelTextFieldと同等の拡張機能が必要な場合には、
* RelTextAreaとして 共通部品を作成して使用してください。
*/
public class RelTextArea
extends JTextArea { /**
* IMEの制御を特に行わない(デフォルト)
*/
public final static int IME_NONE = 0;
/**
* フォーカス取得時にIMEをオフにする
*/
public final static int IME_OFF = 1;
/**
* フォーカス取得時にIMEをオンにする
*/
public final static int IME_ON = 2; /**
* 文字列長をOS標準文字セットによるバイト数で判断
*/
public final static int LENGTH_BY_NATIVE = 0;
/**
* 文字列長をUNICODEキャラクタ数で判断(デフォルト)
*/
public final static int LENGTH_BY_UNICODE = 1; /**
* 全ての文字種の入力を許可(デフォルト)
*/
public final static int REFUSAL_NONE = 0;
/**
* 全角文字の入力を拒否
*/
public final static int REFUSAL_WIDE = 1;
/**
* 半角数字の入力を拒否
*/
public final static int REFUSAL_NUMBER = 2;
/**
* 半角英字の入力を拒否
*/
public final static int REFUSAL_ALPHABET = 4;
/**
* 半角記号の入力を拒否
*/
public final static int REFUSAL_SYMBOL = 8; private int piImeMethod; // フォーカス取得時のIME制御方法
private int piMaxLineCount; // 最大行数の制限
private int piMaxLength; // 単行の最大文字列長
private int piMaxStringNum; // 最大文字数
private int piLengthMethod; // 文字列長の判定方法
private boolean pbReplaceMode; // フォーカス取得時の置換モード
private int piRefusalMode; // 入力拒否文字列の種類 private Hashtable phRefusal = new Hashtable(); // 文字入力の制御方法の保存用
private String SNULL = ""; // 判断用の0長度の文字列
private String STRNULL = "null"; // 判断用の文字列 /**
* RelTextArea
* コンストラクタ
*/
public RelTextArea() {
this("", 0, 0, LENGTH_BY_UNICODE, false, IME_NONE);
} // END RelTextArea() /**
* RelTextArea
* コンストラクタ
* @param asText : 表示用の文字列を指定する。
*/
public RelTextArea(String asText) {
this(asText, 0, 0, LENGTH_BY_UNICODE, false, IME_NONE);
} // END RelTextArea(String) /**
* RelTextArea
* コンストラクタ
* @param asText : 表示する文字列を指定する。
* @param aiMaxLineCount : テキストエリアの最大行数を指定する。
* @param aiMaxLength : 単行の最大文字列長を指定する。
*/
public RelTextArea(String asText, int aiMaxLineCount, int aiMaxLength) {
this(asText, aiMaxLineCount, aiMaxLength, LENGTH_BY_UNICODE, false,
IME_NONE);
} // END RelTextArea(String, int, int) /**
* RelTextArea
* コンストラクタ
* @param asText : 表示する文字列を指定する。
* @param aiMaxLineCount : テキストエリアの最大行数を指定する。
* @param aiMaxLength : 単行の最大文字列長を指定する。
* @param aiLengthMethod : 文字列の判定方法を指定する。判定方法は次の値を指定する。
* 値 説明
* LENGTH_BY_UNICODE UNICODE キャラクタ数により判定する。
* LENGTH_BY_NATIVE OSの標準文字セットによるバイト数により判定
* する。
*/
public RelTextArea(String asText, int aiMaxLineCount,
int aiMaxLength, int aiLengthMethod) {
this(asText, aiMaxLineCount, aiMaxLength, aiLengthMethod, false,
IME_NONE);
} // END RelTextArea(String, int, int, int) /**
* RelTextArea
* コンストラクタ
* @param asText : 表示する文字列を指定する。
* @param aiMaxLineCount : テキストエリアの最大行数を指定する。
* @param aiMaxLength : 単行の最大文字列長を指定する。
* @param aiLengthMethod : 文字列の判定方法を指定する。判定方法は次の値を指定する。
* 値 説明
* LENGTH_BY_UNICODE UNICODE キャラクタ数により判定する。
* LENGTH_BY_NATIVE OSの標準文字セットによるバイト数により判定
* する。
* @param abMode : 置換モードを指定する。置換モードには次の値を指定する
* 値 説明
* true フォーカス取得時に全テキストが選択状態になる。
* false 特に制御は行わない。
*/
public RelTextArea(String asText, int aiMaxLineCount,
int aiMaxLength, int aiLengthMethod, boolean abMode) {
this(asText, aiMaxLineCount, aiMaxLength, aiLengthMethod, abMode,
IME_NONE);
} // END RelTextArea(String, int, int, int, boolean) /**
* RelTextArea
* コンストラクタ
* @param asText : 表示する文字列を指定する。
* @param aiMaxLineCount : テキストエリアの最大行数を指定する。
* @param aiMaxLength : 単行の最大文字列長を指定する。
* @param aiLengthMethod : 文字列の判定方法を指定します。判定方法は次の値を指定する。
* 値 説明
* LENGTH_BY_UNICODE UNICODE キャラクタ数により判定する。
* LENGTH_BY_NATIVE OSの標準文字セットによるバイト数により判定
* する。
* @param abMode : 置換モードを指定する。置換モードには次の値を指定する
* 値 説明
* true フォーカス取得時に全テキストが選択状態になる。
* false 特に制御は行われません。
* @param aiImeMethod : IMEの制御方法を指定する。制御方法は次の値を指定する。
* 値 説明
* IME_NONE IME 制御を特に行わない。
* IME_ON フォーカス取得時にIMEをONにセットする。
* IME_OFF フォーカス取得時にIMEをOFFにセットする。
*/
public RelTextArea(String asText, int aiMaxLineCount, int aiMaxLength,
int aiLengthMethod, boolean abMode, int aiImeMethod) {
super();
enableEvents(AWTEvent.KEY_EVENT_MASK); // イベントの送信
setText(asText); // ディフォトテキストを指定する
piImeMethod = aiImeMethod; // フォーカス取得時のIME制御方法を指定する
piMaxLineCount = aiMaxLineCount; // 最大行数の指定
piMaxLength = aiMaxLength; // 単行の最大文字列長の指定
piLengthMethod = aiLengthMethod; // 文字列長の判定方法の指定
pbReplaceMode = abMode; // フォーカス取得時の置換モードの指定
piRefusalMode = REFUSAL_NONE; // 入力拒否文字列を指定する
setDocument(new PlainDocument()); // ディフォトドキュメントを指定する
String[] psRefusalVal = {
"0", "1", "2", "12", "4", "14", "24", "124", "8", "18", "28", "128",
"48", "148", "248", "1248"};
for (int i = 0;
i <=
(REFUSAL_WIDE + REFUSAL_NUMBER + REFUSAL_ALPHABET + REFUSAL_SYMBOL);
i++) {
phRefusal.put(SNULL + i, psRefusalVal[i]);
} // END FOR
this.setUI(new pTextAreaUI());
} // END RelTextArea(String, int, int, int, boolean, int )
/**
* getIMEMethod
* IMEの制御方法を取得する。
* @return int : IME制御方法が返る。戻り値は次の意味がある。
* 戻り値 説明
* IME_NONE IME 制御を特に行わない。
* IME_ON フォーカス取得時にIMEをONに指定する。
* IME_OFF フォーカス取得時にIME をOFFに指定する。
*/
public int getIMEMethod() {
return piImeMethod;
} // END getIMEMethod() /**
* getLength
* テキストエリアに入力されている文字列長を取得する
* @return int : テキストエリア全体の文字列長が返る。
* 成功した場合は、入力されているテキストエリアの文字列長を取得する。
* 失敗した場合は-1が返る。
*/
public int getLength() {
try {
// 文字列長をUNICODEキャラクタ数で判断
if (piLengthMethod == LENGTH_BY_UNICODE) {
return getDocument().getLength();
}
// 文字列長をOS標準文字セットによるバイト数で判断
else {
return getText().getBytes().length;
} // END IF
} // END TRY
catch (Exception ex) {
//例外が発生した場合、またはエラーが発生した場合は-1を返る。
return -1;
} // END CATCH
} // END getLength() /**
* getLength
* テキストエリアにおいて指定された行の文字列長を取得する。
* @param aiLineNum : 文字列数を取得する行を指定する。
* @return int : 成功した場合、指定された行の文字列長が返る。
* 失敗した場合は-1が返る。
*/
public int getLength(int aiLineNum) {
try {
// 文字列長をUNICODEキャラクタ数で判断
if (piLengthMethod == LENGTH_BY_UNICODE) {
/*
指定された行の開始オフセットを取得する
指定された行の終了オフセットを取得する。
終了オフセットから開始オフセットの差をとり、1プラスする
計算した値を戻り値として返る。
*/
String psVal = getDocument().getText(
getLineStartOffset(aiLineNum),
getLineEndOffset(aiLineNum) -
getLineStartOffset(aiLineNum) + 1);
return psVal.length();
}
// 文字列長をOS標準文字セットによるバイト数で判断
else {
/*
指定された行の文字列を取得する。
文字列のバイト配列を取得する。
バイト配列の長さを戻り値として返る。
*/
String psVal = getDocument().getText(
getLineStartOffset(aiLineNum),
getLineEndOffset(aiLineNum) -
getLineStartOffset(aiLineNum));
return psVal.getBytes().length;
} // END IF
}
catch (Exception ex) {
//例外が発生した場合、またはエラーが発生した場合は-1を返る。
return -1;
} // END TRY
} // END getLength(int) /**
* getLengthMethod
* 文字列長の判断方法を取得する。
* @return int : 文字列長の判定方法が返る。戻り値には次の意味があす
* 戻り値 説明
* LENGTH_BY_UNICODE UNICODE キャラクタ数により判定する。
* LENGTH_BY_NATIVE OSの標準文字セットによるバイト数により判定する。
*/
public int getLengthMethod() {
return piLengthMethod;
} // END getLengthMethod()
/**
* getMaxLength
* 単行に入力できる最大文字列長を取得する。
* @return int : 単行に入力できる最大文字列長が返る。
*/
public int getMaxLength() {
return piMaxLength;
} // END getMaxLength() /**
* getMaxLineCount
* テキストエリアに入力可能な最大行数を取得する。
* @return int : テキストエリアに入力可能な最大行数が返る。
*/
public int getMaxLineCount() {
return piMaxLineCount;
} // END getMaxLineCount() /**
* getRefusalCharacterMode
* 入力拒否する文字セットモードを取得する。
* @return int : 設定されている入力拒否モードが返る。
* 戻り値は次の値の組み合わせの意味を持つ。
* 戻り値 説明
* REFUSAL_NONE 全ての文字種を許可している。
* REFUSAL_WIDE 全角文字の入力を拒否している。
* REFUSAL_NUMBER 半角数字の入力を拒否している。
* REFUSAL_ALPHABET 半角英字の入力を拒否している。
* REFUSAL_SYMBOL 半角記号の入力を拒否している。
*/
public int getRefusalCharacterMode() {
return piRefusalMode;
} // END getRefusalCharacterMode() /**
* getReplaceMode
* 現在の置換モードを取得する。
* @return boolean : 現在の置換モードが返る。
* 戻り値 説明
* true フォーカス取得時に全テキストが選択状態になる。
* false 特に制御は行わない。
*/
public boolean getReplaceMode() {
return pbReplaceMode;
} // END getReplaceMode() /**
* getMaxStringNum
* 最大文字数の取得
* @return int
*/
public int getMaxStringNum() {
return this.piMaxStringNum;
} /**
* processFocusEvent
* フォーカス取得または喪失時のイベント処理を行う。
* @param aoEvent : フォーカスイベント
*/
public void processFocusEvent(FocusEvent aoEvent) {
// フォーカス取得する時
if (aoEvent.getID() == FocusEvent.FOCUS_GAINED) {
if (pbReplaceMode) {
this.selectAll();
} // END IF
// IMEがIME_ON
if (piImeMethod == IME_ON) {
this.getInputContext().setCharacterSubsets(new Character.Subset[] {
InputSubset.KANJI});
super.enableInputMethods(true);
}
// IMEがIME_OFF、IME_NONE
else if (piImeMethod == IME_OFF) {
this.getInputContext().setCharacterSubsets(new Character.Subset[] {
InputSubset.LATIN_DIGITS});
super.enableInputMethods(false);
}
else {
this.getInputContext().setCharacterSubsets(new Character.Subset[] {
InputSubset.LATIN_DIGITS});
} // END IF
}
// フォーカス失う時
else if (aoEvent.getID() == FocusEvent.FOCUS_LOST) {
//this.getInputContext().setCharacterSubsets(new Character.Subset[] {
// InputSubset.FULLWIDTH_LATIN});
super.enableInputMethods(true);
} // END IF
super.processFocusEvent(aoEvent);
} // END processFocusEvent(FocusEvent) /**
* replaceSelection
* テキストエリアに入力された文字列のチェックと挿入処理を行う。
* @param asDestination : テキストエリアに入力された文字列
*/
public void replaceSelection(String asDestination) {
replaceRange(asDestination,
this.getSelectionStart(), this.getSelectionEnd());
} // END replaceSelection(String) /**
* replaceRange
* テキストエリアへの入力処理を行う。
* 入力時には、利用するテキストエリアに設定された入力長、
* 文字列制限によるチェックが行われる。
* @param asDestination : テキストエリアに入力された文字列
* @param aiStart : 選択されているテキストの開始位置を指定する
* @param aiEnd : 選択されているテキストの終了位置を指定する
*/
public void replaceRange(String asDestination, int aiStart, int aiEnd) {
//入力拒否文字列のチェック
if (piRefusalMode != REFUSAL_NONE) {
//引数asDestinationにpiRefusalModeに一致する文字列が存在するかチェックする。
String psReVal = SNULL + phRefusal.get(SNULL + piRefusalMode);
if (mChkStr(psReVal).equals(SNULL)) {
return;
} // END IF
if (asDestination == null) {
if (this.getSelectionEnd() != this.getSelectionStart()) {
super.replaceSelection(asDestination);
} // END IF
return;
} // END IF
for (int m = 0; m < psReVal.length(); m++) {
char psStr = psReVal.charAt(m);
//全角文字の入力を拒否
if (psStr == '1') {
for (int n = 0; n < asDestination.length(); n++) {
if ( (SNULL + asDestination.charAt(n)).getBytes().
length == 2) {
return;
} // END IF
} // END FOR
} // END IF
//半角数字の入力を拒否
if (psStr == '2') {
if (ChkNumAlpha(asDestination)) {
return;
} // END IF
} // END IF
//半角英字の入力を拒否
if (psStr == '4') {
if (ChkEngAlpha(asDestination)) {
return;
} // END IF
} // END IF
//半角記号の入力を拒否
if (psStr == '8') {
if (ChkSignAlpha(asDestination)) {
return;
} // END IF
} // END IF
} // END FOR
} // END IF if (piMaxLineCount != 0) {
int curLines = this.calculateLines(this.getText() + asDestination);
if (curLines > piMaxLineCount) {
return;
}
} if(piMaxStringNum > 0) {
int max = piMaxLineCount * piMaxLength;
max = max > 0 ? Math.min(max, piMaxStringNum) : piMaxStringNum;
int leftLen = max - getText().length();
if(leftLen < asDestination.length()) {
asDestination = asDestination.substring(0, leftLen);
}
}
super.replaceRange(asDestination, aiStart, aiEnd);
} // END replaceRange(String, int, int)
/**
* setIMEMethod
* IMEの制御方法を設定する。
* @param aiImeMethod : IMEの制御方法を指定する。制御方法は次の値を指定する。
* 値 説明
* IME_NONE IME 制御を特に行わない。
* IME_ON フォーカス取得時にIMEをONにする。
* IME_OFF フォーカス取得時にIME をOFFにする。
* @return boolean : 成功時はtrueを返します。引数が不正な場合はfalseを返る。
*/
public boolean setIMEMethod(int aiImeMethod) {
if (aiImeMethod != IME_NONE &&
aiImeMethod != IME_ON &&
aiImeMethod != IME_OFF) {
return false;
} // END IF
piImeMethod = aiImeMethod;
return true;
} // END setIMEMethod(int) /**
* setLengthMethod
* 文字列長の判定方法を設定する。
* @param aiLengthMethod : 文字列の判定方法を指定する。判定方法は次の値を指定する。
* 値 説明
* LENGTH_BY_UNICODE UNICODE キャラクタ数により判定する。
* LENGTH_BY_NATIVE OSの標準文字セットによるバイト数により判定する。
* @return boolean : 成功の時にtrueを返る、引数が不正な場合にfalseを返る。
*/
public boolean setLengthMethod(int aiLengthMethod) {
if (aiLengthMethod != LENGTH_BY_UNICODE &&
aiLengthMethod != LENGTH_BY_NATIVE) {
return false;
} // END IF
piLengthMethod = aiLengthMethod;
return true;
} // END setLengthMethod(int) /**
* setMaxLength
* 入力可能な最大文字列長を設定する。
* @param aiMaxLength : 最大文字列長を指定する。
* @return boolean : 成功の時にtrueを返る、引数が不正な場合にfalseを返る。
*/
public boolean setMaxLength(int aiMaxLength) {
if (aiMaxLength < 0) {
return false;
} // END IF
piMaxLength = aiMaxLength;
this.setLineWrap(true);
return true;
} // END setMaxLength(int) /**
* setMaxLineCount
* テキストエリアに入力できる最大行数を設定する。
* @param aiMaxLineCount : 最大行数を指定する。
* @return boolean : 成功の時のtrueを返る、引数が不正な場合にfalseを返る。
*/
public boolean setMaxLineCount(int aiMaxLineCount) {
if (aiMaxLineCount < 0) {
return false;
} // END IF
piMaxLineCount = aiMaxLineCount;
setRows(aiMaxLineCount); //カラム数の更新
return true;
} // END setMaxLineCount(int) /**
* setRefusalCharacterMode
* 入力拒否する文字セットモードを設定する。
* @param aiRefusalMode : 入力を拒否する文字セットモードを指定する。
* 文字セットモードは次の値の組み合わせで指定する。
* 値 説明
* REFUSAL_NONE 全ての文字種を許可している。
* REFUSAL_WIDE 全角文字の入力を拒否している。
* REFUSAL_NUMBER 半角数字の入力を拒否している。
* REFUSAL_ALPHABET 半角英字の入力を拒否している。
* REFUSAL_SYMBOL 半角記号の入力を拒否している。
* @return boolean : 成功の時にtrueを返る、引数が不正な場合にfalseを返る。
*/
public boolean setRefusalCharacterMode(int aiRefusalMode) {
if (aiRefusalMode < REFUSAL_NONE ||
aiRefusalMode > REFUSAL_WIDE + REFUSAL_NUMBER +
REFUSAL_ALPHABET + REFUSAL_SYMBOL) {
return false;
} // END IF
piRefusalMode = aiRefusalMode;
return true;
} // END setRefusalCharacterMode(int) /**
* setReplaceMode
* 置換モードを設定する。
* @param abMode : 置換モードを指定する。
*/
public void setReplaceMode(boolean abMode) {
pbReplaceMode = abMode;
} // END setReplaceMode(boolean) /**
* setMaxStringNum
* 最大文字数の設定
* @param aiMaxStringNum : 指定した最大文字数
* @return boolean
*/
public boolean setMaxStringNum( int aiMaxStringNum ) {
if(aiMaxStringNum < 0) {
return false;
}
this.piMaxStringNum = aiMaxStringNum;
return true;
} /**
* mChkStr
* <PRE>
* 文字列がNullか否かをチェック
* </PRE>
*
* @param asVal : チェックする文字列
* @return String : <code>Null</code>、<code>"null"</code>、<code>""</code>
* の場合<code>""</code>、その他場合Stringを返る
*/
private String mChkStr(String asVal) {
if (asVal == null) {
return SNULL;
} // END IF
if (asVal.trim().equals(STRNULL)) {
return SNULL;
} // END IF
if (asVal.trim().equals(SNULL)) {
return SNULL;
} // END IF
return asVal.trim();
} // END mChkStr(String) /**
* ChkNumAlpha
* 半角数字のチェック
* @param asval : チェックする文字列
* @return true : YES ; false : NO
*/
private boolean ChkNumAlpha(String asval) {
final String psHanjh = "0123456789";
for (int i = 0; i < psHanjh.length(); i++) {
String pa = psHanjh.substring(i, i + 1);
int pis = asval.indexOf(pa);
if (pis != -1) {
return true;
} // END IF
} // END FOR
return false;
} // END ChkNumAlpha(String)
/**
* ChkEngAlpha
* 半角英字のチェック
* @param asval : チェックする文字列
* @return true : YES ; false : NO
*/
private boolean ChkEngAlpha(String asval) {
final String psHanjh =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < psHanjh.length(); i++) {
String pa = psHanjh.substring(i, i + 1);
int pis = asval.indexOf(pa);
if (pis != -1) {
return true;
} // END IF
} // END FOR
return false;
} // END ChkEngAlpha(String) /**
* ChkSignAlpha
* 半角記号チェック
* @param asval : チェックする文字列
* @return true : YES ; false : NO
*/
private boolean ChkSignAlpha(String asval) {
final String psHanjh = "~!@#$%^&*()_-+=|[]{};:'?.,<>\\ \"/";
for (int i = 0; i < psHanjh.length(); i++) {
String pa = psHanjh.substring(i, i + 1);
int pis = asval.indexOf(pa);
if (pis != -1) {
return true;
} // END IF
} // END FOR
return false;
} // END ChkSignAlpha(String) /**
* calculateLines
* 文字列の行数を計算する
* @param text : 計算する文字列
* @return int : 計算した行数
*/
private int calculateLines(String text) {
int lines = 1;
ArrayList arr = new ArrayList();
//String lineWrap = System.getProperty("line.separator");
String lineWrap = "\n";
int pos = -1;
while ( (pos = text.indexOf(lineWrap)) >= 0) {
arr.add(text.substring(0, pos));
text = text.substring(pos + 1);
} // END WHILE
arr.add(text); lines = arr.size();
int max = getMaxLength();
java.awt.FontMetrics fm = getFontMetrics(getFont());
for (int i = 0; i < arr.size() && this.getLineWrap(); i++) {
String s = (String) arr.get(i);
int len = s.length();
// 単行文字数の制限が無し
if (max == 0) {
int curLen = 0;
for (int j = 0; j < len; j++) {
int chrLen = fm.stringWidth(s.substring(j, j + 1));
if (curLen + chrLen > getWidth()) {
++lines;
curLen = chrLen;
}
else {
curLen += chrLen;
} // END IF
} // END FOR
}
// 単行文字数の制限が有り
else {
int mod = len % max;
lines += mod > 0 ? (len - mod) / max : len / max - 1;
} // END IF
} // END FOR
return lines;
} /**
* <p>pTextUI</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: NECソフト㈱</p>
*/
class pTextAreaUI
extends javax.swing.plaf.basic.BasicTextAreaUI {
/**
* create
* ビューの生成
* @param elem : エレメント
* @return 生成したビュー
*/
public View create(Element elem) {
JTextComponent c = getComponent();
if (c instanceof JTextArea) {
JTextArea area = (JTextArea) c;
View v;
if (area.getLineWrap()) {
v = new pWrappedPlainView(elem, area.getWrapStyleWord());
}
else {
v = new PlainView(elem);
} // END IF
return v;
} // END IF
return null;
} // END create(Element)
} // END pTextAreaUI /**
* <p>pWrappedPlainView</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: NECソフト㈱</p>
*/
class pWrappedPlainView
extends WrappedPlainView {
/**
* pWrappedPlainView
*
* @param elem : エレメント
* @param b :
*/
public pWrappedPlainView(Element elem, boolean b) {
super(elem, b);
} // END pWrappedPlainView(Element, boolean) /**
* calculateBreakPosition
*
* @param p0 : 位置0
* @param p1 : 位置1
* @return : 取得した位置
*/
protected int calculateBreakPosition(int p0, int p1) {
int p;
if (getMaxLength() > 0) {
p = p0 + Math.min(getMaxLength(), p1 - p0);
}
else {
p = super.calculateBreakPosition(p0, p1);
}
return p;
} // END calculateBreakPosition(int, int)
} // END pWrappedPlainView
}
把JTextPane加到JScrollPane中你说的是个好主意。可是不行/