我想通過Jframe中的JButton刪除單行。 但我不知道怎麼... 我試過媒體鏈接:通過TextArea中的JButton刪除單行
public void button1_ActionPerformed(ActionEvent evt) {
int count = 1;
count = TextArea1.getLineCount();
但它不工作... 我欣賞每一個怎樣的幫助:)) 或任何knews解決這個問題的另一種方法?
我想通過Jframe中的JButton刪除單行。 但我不知道怎麼... 我試過媒體鏈接:通過TextArea中的JButton刪除單行
public void button1_ActionPerformed(ActionEvent evt) {
int count = 1;
count = TextArea1.getLineCount();
但它不工作... 我欣賞每一個怎樣的幫助:)) 或任何knews解決這個問題的另一種方法?
您需要使用GetText()來獲取TextArea中的內容,然後刪除該行。一旦你修改了文本,你可以使用SetText()重新放回。
當然,這可以在一行中完成,但分離步驟有助於易讀性。
它幾乎可以正常工作,但我想刪除一行,並且不能使用getText(),因爲如果您有 兩件事在該地區: asdf1 asdf2 您可以將文本設置爲(「」) 但比不僅asdf1是越來越刪除,但也asdf2 對不起我的英語不好而難過偷你的時間:d – user3272186
在你舉例asdf1和asdf2在同一行上。如果你只想擺脫一個你可以使用String.split()來分離它們。有關詳細信息,請參閱http://stackoverflow.com/questions/3481828/how-to-split-a-string-in-java。 – OlivierLi
別擔心,你不是在偷我的時間。如果您覺得我的答案解決了您的問題,您可以使用複選標記來接受它。這將足夠支付! – OlivierLi
答案取決於「線條」的定義。例如,如果您使用的是包裝的JTextArea
,其中單個連續的文本行環繞視圖,則可以將一行視爲從視圖的一側運行到另一側的文本。
在這種情況下,你需要深入研究的模型和計算文本的基礎上,考慮到偏移量和基本除去兩個點之間的內容,例如...
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.Element;
import javax.swing.text.JTextComponent;
import javax.swing.text.Utilities;
public class TestDeleteLine {
public static void main(String[] args) {
new TestDeleteLine();
}
private JTextArea ta;
public TestDeleteLine() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
ta = new JTextArea(20, 40);
ta.setWrapStyleWord(true);
ta.setLineWrap(true);
JButton deleteLine = new JButton("Delete current line");
deleteLine.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
int offset = ta.getCaretPosition();
int rowStart = Utilities.getRowStart(ta, offset);
int rowEnd = Utilities.getRowEnd(ta, offset);
Document document = ta.getDocument();
int len = rowEnd - rowStart + 1;
if (rowStart + len > document.getLength()) {
len--;
}
String text = document.getText(rowStart, len);
document.remove(rowStart, len);
} catch (BadLocationException ex) {
ex.printStackTrace();
}
}
});
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(ta));
frame.add(deleteLine, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
現在,如果你不關心的換行和簡單的想要刪除整條生產線(從一個新行到另一個),你可以使用...
public int getLineByOffset(int offset) throws BadLocationException {
Document doc = ta.getDocument();
if (offset < 0) {
throw new BadLocationException("Can't translate offset to line", -1);
} else if (offset > doc.getLength()) {
throw new BadLocationException("Can't translate offset to line", doc.getLength() + 1);
} else {
Element map = doc.getDefaultRootElement();
return map.getElementIndex(offset);
}
}
public int getLineStartOffset(int line) throws BadLocationException {
Element map = ta.getDocument().getDefaultRootElement();
if (line < 0) {
throw new BadLocationException("Negative line", -1);
} else if (line >= map.getElementCount()) {
throw new BadLocationException("No such line", ta.getDocument().getLength() + 1);
} else {
Element lineElem = map.getElement(line);
return lineElem.getStartOffset();
}
}
public int getLineEndOffset(int line) throws BadLocationException {
Element map = ta.getDocument().getDefaultRootElement();
if (line < 0) {
throw new BadLocationException("Negative line", -1);
} else if (line >= map.getElementCount()) {
throw new BadLocationException("No such line", ta.getDocument().getLength() + 1);
} else {
Element lineElem = map.getElement(line);
return lineElem.getEndOffset();
}
}
public int[] getLineOffsets(int line) throws BadLocationException {
int[] offsest = new int[2];
offsest[0] = getLineStartOffset(line);
offsest[1] = getLineEndOffset(line);
return offsest;
}
計算線路開始和結束位置,計算出文本的長度,並從Document
,這看起來更像是將其刪除...
int offset = ta.getCaretPosition();
int line = getLineByOffset(offset);
int[] lineOffsets = getLineOffsets(line);
int len = lineOffsets[1] - lineOffsets[0] - 1;
Document document = ta.getDocument();
String text = document.getText(lineOffsets[0], len);
document.remove(lineOffsets[0], len);
這隻會計數變量的值。你忘了粘貼一些代碼? – OlivierLi
我不這麼認爲......並且我不知道如何修復該程序:P 它也顯示了get line,但我不確定它是如何工作的 – user3272186
定義「line」 - 這是一條物理線路,用「\ n」分隔,新行或文本行出現在文本區域中? – MadProgrammer