📄 formattrs.java
字号:
package com.prcomps.cahitarf.gui;
import com.sohlman.easylayout.EasyLayout;
import com.sohlman.easylayout.Constraint;
import com.prcomps.cahitarf.Db2Arff;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JComboBox;
import javax.swing.DefaultCellEditor;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JFileChooser;
import java.util.ResourceBundle;
import java.util.ArrayList;
import java.sql.Connection;
import java.sql.SQLException;
import java.io.FileNotFoundException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.awt.Dimension;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
/**
*/
public class FormAttrs
extends JPanel
implements IWizardPanel
{
private AttrsTableModel tmodel = new AttrsTableModel();
private JTable tblAttrs = new JTable( tmodel );
private ResourceBundle bundle = WizardFrame.getBundle();
private JComboBox cbTypes = new JComboBox();
private JComboBox cbQuote = new JComboBox( new String[] { "", "\"", "'" } );
private JLabel lblPars;
private static final String specialSaveChars = "=: \t\r\n\f#!";
public FormAttrs()
{
createForm();
setName( WizardFrame.FORM_ATTRS );
}
private void createForm()
{
cbTypes.addItem( AttrsTableModel.TYPE_NUMERIC );
cbTypes.addItem( AttrsTableModel.TYPE_CLASS );
cbTypes.addItem( AttrsTableModel.TYPE_STRING );
setLayout( new EasyLayout( new int[]{ 50, 50 }, new int[]{ 50, 50 }, 8, 8 ) );
lblPars = new JLabel()
{
public Dimension getPreferredSize()
{
return new Dimension(400, 300);
}
public Dimension getMinimumSize()
{
return new Dimension(200, 200);
}
};
add( lblPars, new Constraint( 0, 0, 2, 1 ) );
JScrollPane attrsPane = new JScrollPane( tblAttrs );
add( attrsPane, new Constraint( 0, 1 ) );
JButton btnSave = new JButton( bundle.getString("wizard.attrs.save" ) );
btnSave.addActionListener( new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
saveConfig();
}
});
add( btnSave, new Constraint( 1, 1, Constraint.CENTER, Constraint.BOTTOM, 0, 5 ) );
}
public String getNext()
throws NotReadyException
{
saveAttrs();
return WizardFrame.FORM_RUN;
}
public String getPrev()
throws NotReadyException
{
saveAttrs();
return WizardFrame.FORM_SELECT;
}
private void saveAttrs()
{
ArrayList attrs = tmodel.getAttrs();
for ( int i=0; i<attrs.size(); i++ )
WizardFrame.properties.setProperty( Db2Arff.PROP_FIELD_ + i, attrs.get(i).toString() );
for ( int i=attrs.size(); WizardFrame.properties.remove( Db2Arff.PROP_FIELD_ + i ) != null; i++ )
;
}
private void saveConfig()
{
saveAttrs();
JFileChooser fc = new JFileChooser( System.getProperty( "user.dir" ) );
int result = fc.showSaveDialog( this );
if ( result == JFileChooser.APPROVE_OPTION )
saveConfig( fc.getSelectedFile() );
}
private void saveConfig( File pca )
{
try
{
FileOutputStream fout = new FileOutputStream( pca );
PrintStream out = new PrintStream( fout );
out.println( "# Created by Cahit Arf Wizard" );
out.println( "# " + new java.util.Date() );
out.println( Db2Arff.PROP_RELATION + '=' + WizardFrame.properties.getProperty( Db2Arff.PROP_RELATION ) );
out.println();
out.println( Db2Arff.PROP_JDBC_DRIVER + '=' + WizardFrame.properties.getProperty( Db2Arff.PROP_JDBC_DRIVER ) );
out.println( Db2Arff.PROP_JDBC_URL + '=' + WizardFrame.properties.getProperty(Db2Arff.PROP_JDBC_URL ) );
out.println( Db2Arff.PROP_JDBC_USER + '=' + WizardFrame.properties.getProperty( Db2Arff.PROP_JDBC_USER ) );
out.println( Db2Arff.PROP_JDBC_PASSWORD + '=' + WizardFrame.properties.getProperty( Db2Arff.PROP_JDBC_PASSWORD ) );
out.println();
out.println( Db2Arff.PROP_JDBC_SELECT + '=' + saveConvert(
WizardFrame.properties.getProperty( Db2Arff.PROP_JDBC_SELECT ), false ) );
out.println();
for ( int i=0; ; i++ )
{
String attr = WizardFrame.properties.getProperty( Db2Arff.PROP_FIELD_ + i );
if ( attr == null )
break;
out.println( (Db2Arff.PROP_FIELD_ + i) + '=' + attr );
}
out.println();
//WizardFrame.properties.store( out, "Created by Cahit Arf Wizard" );
FormStart.addPrefsFiles( pca.getPath().replace( '\\', '/' ) );
}
catch ( FileNotFoundException e )
{
e.printStackTrace(); //To change body of catch statement use Options | File Templates.
}
catch ( IOException e )
{
e.printStackTrace(); //To change body of catch statement use Options | File Templates.
}
}
public void checkStatus()
{
if ( ! FormSelect.selectUpdated && WizardFrame.properties.getProperty( Db2Arff.PROP_FIELD_ + "0" ) != null )
{
tmodel.loadAttrs();
}
else
{
Db2Arff db2Arff = new Db2Arff();
db2Arff.setProperties( WizardFrame.properties );
try
{
db2Arff.loadDrivers();
Connection conn = db2Arff.connect();
tmodel.setConnection( conn );
tmodel.executeQuery( WizardFrame.properties.getProperty( Db2Arff.PROP_JDBC_SELECT ) );
}
catch ( FileNotFoundException e )
{
e.printStackTrace(); //To change body of catch statement use Options | File Templates.
}
catch ( SQLException e )
{
e.printStackTrace(); //To change body of catch statement use Options | File Templates.
}
catch ( ClassNotFoundException e )
{
e.printStackTrace(); //To change body of catch statement use Options | File Templates.
}
}
tblAttrs.getColumnModel().getColumn( 1 ).setCellEditor( new DefaultCellEditor( cbTypes ) );
tblAttrs.getColumnModel().getColumn( 2 ).setCellEditor( new DefaultCellEditor( cbQuote ) );
SwingUtilities.updateComponentTreeUI( cbTypes );
SwingUtilities.updateComponentTreeUI( cbQuote );
FormSelect.selectUpdated = false;
StringBuffer str = new StringBuffer();
str.append( "<html><p align=center>" ).append( bundle.getString( "wizard.db.relation" ) )
.append( " <strong>" ).append( WizardFrame.properties.getProperty( Db2Arff.PROP_RELATION ) )
.append( "</strong></p>");
str.append( "<li>" )
.append( bundle.getString( "wizard.db.driver" ) )
.append( " : <strong>")
.append( WizardFrame.properties.getProperty( Db2Arff.PROP_JDBC_DRIVER ) )
.append( "</strong>");
str.append( "<li>" )
.append( bundle.getString( "wizard.db.url" ) )
.append( " : <strong>")
.append( WizardFrame.properties.getProperty( Db2Arff.PROP_JDBC_URL ) )
.append( "</strong>");
str.append( "<li>" )
.append( bundle.getString( "wizard.db.user" ) )
.append( " : <strong>")
.append( WizardFrame.properties.getProperty( Db2Arff.PROP_JDBC_USER ) )
.append( "</strong>");
str.append( "<li>" )
.append( bundle.getString( "wizard.select.title" ) )
.append( " : <strong>")
.append( WizardFrame.properties.getProperty( Db2Arff.PROP_JDBC_SELECT ) )
.append( "</strong>");
str.append( "</ul></html>" );
lblPars.setText( str.toString() );
}
/*
* Converts unicodes to encoded \uxxxx
* and writes out any of the characters in specialSaveChars
* with a preceding slash
*/
private String saveConvert(String theString, boolean escapeSpace)
{
int len = theString.length();
StringBuffer outBuffer = new StringBuffer(len*2);
for(int x=0; x<len; x++)
{
char aChar = theString.charAt(x);
switch(aChar)
{
case ' ':
if (x == 0 || escapeSpace)
outBuffer.append('\\');
outBuffer.append(' ');
break;
case '\\':outBuffer.append('\\'); outBuffer.append('\\');
break;
case '\t':outBuffer.append('\\'); outBuffer.append('t');
break;
case '\n':outBuffer.append('\\'); outBuffer.append('n');
break;
case '\r':outBuffer.append('\\'); outBuffer.append('r');
break;
case '\f':outBuffer.append('\\'); outBuffer.append('f');
break;
default:
if ((aChar < 0x0020) || (aChar > 0x007e)) {
outBuffer.append('\\');
outBuffer.append('u');
outBuffer.append(toHex((aChar >> 12) & 0xF));
outBuffer.append(toHex((aChar >> 8) & 0xF));
outBuffer.append(toHex((aChar >> 4) & 0xF));
outBuffer.append(toHex( aChar & 0xF));
} else {
if (specialSaveChars.indexOf(aChar) != -1)
outBuffer.append('\\');
outBuffer.append(aChar);
}
}
}
return outBuffer.toString();
}
/**
* Convert a nibble to a hex character
* @param nibble the nibble to convert.
*/
private static char toHex(int nibble)
{
return hexDigit[(nibble & 0xF)];
}
/** A table of hex digits */
private static final char[] hexDigit = {
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -