Made autoscroll work better.

Fixed a few glitches in console output.
This commit is contained in:
StevenLawson 2014-08-17 16:32:52 -04:00
parent 4b632bdd23
commit 7569cbfaf2
4 changed files with 59 additions and 29 deletions

View file

@ -43,11 +43,6 @@
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>

View file

@ -20,6 +20,7 @@ public class BTC_ConnectionManager
private int port;
private boolean canDoDisconnect = false;
private String loginName;
final ByteArrayOutputStream consoleBuffer = new ByteArrayOutputStream();
public BTC_ConnectionManager()
{
@ -113,7 +114,12 @@ public class BTC_ConnectionManager
{
if (verbose)
{
BTC_MainPanel.CONSOLE_STREAM.format("%s\r\n", text);
final BTC_MainPanel btc = BukkitTelnetClient.mainPanel;
String buffer = consoleBuffer.toString();
consoleBuffer.reset();
btc.writeToConsole(buffer + text);
}
this.telnetClient.getOutputStream().write((text + "\n").getBytes());
@ -153,7 +159,6 @@ public class BTC_ConnectionManager
public void run()
{
final BTC_MainPanel btc = BukkitTelnetClient.mainPanel;
final ByteArrayOutputStream consoleBuffer = new ByteArrayOutputStream();
try
{
@ -232,7 +237,8 @@ public class BTC_ConnectionManager
}
catch (IOException ex)
{
BukkitTelnetClient.LOGGER.log(Level.SEVERE, null, ex);
ex.printStackTrace(BTC_MainPanel.CONSOLE_STREAM);
btc.updateConsole();
}
finishDisconnect();

View file

@ -44,7 +44,7 @@
<SubComponents>
<Container class="javax.swing.JSplitPane" name="splitPane">
<Properties>
<Property name="dividerLocation" type="int" value="700"/>
<Property name="resizeWeight" type="double" value="1.0"/>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
@ -62,7 +62,7 @@
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="jScrollPane1" max="32767" attributes="0"/>
<Component id="mainOutputScoll" max="32767" attributes="0"/>
<Group type="102" attributes="0">
<Group type="103" groupAlignment="0" max="-2" attributes="0">
<Component id="jLabel2" max="32767" attributes="0"/>
@ -93,7 +93,7 @@
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="-2" max="-2" attributes="0"/>
<Component id="jScrollPane1" pref="360" max="32767" attributes="0"/>
<Component id="mainOutputScoll" pref="360" max="32767" attributes="0"/>
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="txtCommand" alignment="3" min="-2" max="-2" attributes="0"/>
@ -114,7 +114,7 @@
</DimensionLayout>
</Layout>
<SubComponents>
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
<Container class="javax.swing.JScrollPane" name="mainOutputScoll">
<AuxValues>
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
</AuxValues>
@ -125,7 +125,7 @@
<Properties>
<Property name="editable" type="boolean" value="false"/>
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Courier New" size="12" style="0"/>
<Font name="Courier New" size="11" style="0"/>
</Property>
</Properties>
</Component>

View file

@ -18,6 +18,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.net.URL;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
@ -25,8 +26,10 @@ import java.util.logging.Level;
import javax.swing.JCheckBox;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JScrollBar;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
@ -71,8 +74,6 @@ public class BTC_MainPanel extends javax.swing.JFrame
setIconImage(Toolkit.getDefaultToolkit().createImage(icon));
}
this.splitPane.setResizeWeight(1.0);
setupTablePopup();
this.connectionManager.updateTitle(false);
@ -81,8 +82,13 @@ public class BTC_MainPanel extends javax.swing.JFrame
this.setVisible(true);
}
public final void updateTextPane(final String text)
public final void updateTextPane(final String line)
{
if (line.isEmpty())
{
return;
}
SwingUtilities.invokeLater(new Runnable()
{
@Override
@ -90,12 +96,14 @@ public class BTC_MainPanel extends javax.swing.JFrame
{
final StyledDocument styledDocument = mainOutput.getStyledDocument();
int startLength = styledDocument.getLength();
try
{
styledDocument.insertString(
styledDocument.getLength(),
text,
StyleContext.getDefaultStyleContext().addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, BTC_FormatHandler.getColor(text))
line,
StyleContext.getDefaultStyleContext().addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, BTC_FormatHandler.getColor(line))
);
}
catch (BadLocationException ex)
@ -105,7 +113,26 @@ public class BTC_MainPanel extends javax.swing.JFrame
if (BTC_MainPanel.this.chkAutoScroll.isSelected() && BTC_MainPanel.this.mainOutput.getSelectedText() == null)
{
BTC_MainPanel.this.mainOutput.setCaretPosition(styledDocument.getLength() - 1);
final JScrollBar vScroll = mainOutputScoll.getVerticalScrollBar();
if (!vScroll.getValueIsAdjusting())
{
if (vScroll.getValue() + vScroll.getModel().getExtent() >= (vScroll.getMaximum() - 10))
{
BTC_MainPanel.this.mainOutput.setCaretPosition(startLength);
final Timer timer = new Timer(10, new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
vScroll.setValue(vScroll.getMaximum());
}
});
timer.setRepeats(false);
timer.start();
}
}
}
}
});
@ -118,10 +145,13 @@ public class BTC_MainPanel extends javax.swing.JFrame
final String[] lines = data.split("\\n");
for (String line : lines)
{
if (!line.isEmpty())
{
updateTextPane(line + '\n');
}
}
}
public final void writeToConsole(String line)
{
@ -458,7 +488,7 @@ public class BTC_MainPanel extends javax.swing.JFrame
splitPane = new javax.swing.JSplitPane();
jPanel3 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
mainOutputScoll = new javax.swing.JScrollPane();
mainOutput = new javax.swing.JTextPane();
btnDisconnect = new javax.swing.JButton();
btnSend = new javax.swing.JButton();
@ -480,11 +510,11 @@ public class BTC_MainPanel extends javax.swing.JFrame
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("BukkitTelnetClient");
splitPane.setDividerLocation(700);
splitPane.setResizeWeight(1.0);
mainOutput.setEditable(false);
mainOutput.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
jScrollPane1.setViewportView(mainOutput);
mainOutput.setFont(new java.awt.Font("Courier New", 0, 11)); // NOI18N
mainOutputScoll.setViewportView(mainOutput);
btnDisconnect.setText("Disconnect");
btnDisconnect.setEnabled(false);
@ -547,7 +577,7 @@ public class BTC_MainPanel extends javax.swing.JFrame
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1)
.addComponent(mainOutputScoll)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
@ -573,7 +603,7 @@ public class BTC_MainPanel extends javax.swing.JFrame
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 360, Short.MAX_VALUE)
.addComponent(mainOutputScoll, javax.swing.GroupLayout.DEFAULT_SIZE, 360, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txtCommand, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
@ -622,7 +652,6 @@ public class BTC_MainPanel extends javax.swing.JFrame
return canEdit [columnIndex];
}
});
tblPlayers.setRowSelectionAllowed(true);
tblPlayers.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jScrollPane2.setViewportView(tblPlayers);
tblPlayers.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
@ -724,7 +753,7 @@ public class BTC_MainPanel extends javax.swing.JFrame
private void chkAutoScrollActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_chkAutoScrollActionPerformed
{//GEN-HEADEREND:event_chkAutoScrollActionPerformed
updateTextPane("");
// updateTextPane("");
}//GEN-LAST:event_chkAutoScrollActionPerformed
private void btnConnectActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnConnectActionPerformed
@ -775,10 +804,10 @@ public class BTC_MainPanel extends javax.swing.JFrame
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JTextPane mainOutput;
private javax.swing.JScrollPane mainOutputScoll;
private javax.swing.JSplitPane splitPane;
private javax.swing.JTable tblPlayers;
private javax.swing.JTextField txtCommand;