Hello Everyone and thx提前。 所以我的问题是我想在JPanel上绘制一些条件,在JtextArea中插入的内容是正确的吗? : DocumentListener检查插入操作:
protected class MyDocumentListener extends JPanel implements javax.swing.event.DocumentListener {
@Override
public void changedUpdate(javax.swing.event.DocumentEvent e) {
// text has been altered in the textarea
}
@Override
public void insertUpdate(javax.swing.event.DocumentEvent e)
{
// text has been added to the textarea
try {
//if not prompt Line
if (!Traffic.getText(Traffic.getLineStartOffset(Traffic.getLineCount()-1),
Traffic.getLineEndOffset(Traffic.getLineCount()-1)- Traffic.getLineStartOffset(Traffic.getLineCount()-1)).contains(">>"))
{//if a line after a replace has been inserted
if (Traffic.getLineCount() == (lastreplace + 2) )
{
System.err.println(Traffic.getText(Traffic.getLineStartOffset(lastreplace),
Traffic.getLineEndOffset(lastreplace) -
Traffic.getLineStartOffset(lastreplace)));
PortArchitecture (Traffic.getText(Traffic.getLineStartOffset(lastreplace),
Traffic.getLineEndOffset(lastreplace) -
Traffic.getLineStartOffset(lastreplace)));
lastreplace +=1;
}
else//last line when it's not detected by the previous condition it'll be consumed here
{
System.err.println(Traffic.getText(Traffic.getLineStartOffset(lastreplace),
Traffic.getLineEndOffset(lastreplace) -
Traffic.getLineStartOffset(lastreplace)));
PortArchitecture (Traffic.getText(Traffic.getLineStartOffset(lastreplace),
Traffic.getLineEndOffset(lastreplace) -
Traffic.getLineStartOffset(lastreplace)));
}
}
Traffic.setCaretPosition(Traffic.getDocument().getLength());
} catch (BadLocationException ex) {
Logger.getLogger(TrafficSerialPort.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void removeUpdate(javax.swing.event.DocumentEvent e) {
// text has been removed from the textarea
}
}
Methode检查条件并在JPanel上绘图:
public void PortArchitecture (String line) throws BadLocationException
{
Graphics2D gfx = (Graphics2D)graphicPanel.getGraphics();
String [] valuesId = new String [2];
valuesId = line.split(":");
/**switch (valuesId[0])
{
case "Port Number" : draw();
}*/
if(valuesId[0].contains("Port number"))
{
gfx.drawString("(PN)", 30, 10);
gfx.drawString(valuesId[1],30, 140);
}
if(valuesId[0].contains("Port Extension"))
{
gfx.drawString("(EXT)", 100, 10);
gfx.drawString(valuesId[1], 100, 140);
// draw(g);
}
if(valuesId[0].contains("Forward Extension"))
{
gfx.drawLine(140,80,140,110);
// draw(g);
}
if(valuesId[0].contains("ON-HOOK"))
{
// draw(g);
}
if(valuesId[0].contains("OFF-HOOK"))
{
// draw(g);
}
if(valuesId[0].contains("Forward status"))
{
if(valuesId[1].contains("FORWARDED"))
{
// draw(g);
}
else
{
// draw(g);
}
}
if(valuesId[0].contains("Dialing"))
{
//get dialed number
//draw(g);
}
}
另一件事:我有一些关于显示一些图纸的结果,但是当我最小化应用程序时,所有的图形都消失了。我知道我需要调用repaint()但我不知道何时以及如何。 求救!
答案 0 :(得分:0)
所以我很难学习它,但所有绘图必须在paintComponent()方法中。所以在我的情况下我需要3个类(这适合任何有兴趣的人): - 第一个初始化JTextArea并将documentListener添加到它。 - 第二个是DocumentListener类。 - 第三个是从JPanel(或JComponent)扩展的类,包含paintComponent()方法。
希望它会有所帮助!