我最近在我的Java应用程序中遇到了上述问题。即使我将字段明确设置为JPasswordField并尝试用星号掩盖密码,但我仍然会遇到此问题。当我们编辑密码字段时,不会发生问题,仅当您选择该行时才会发生。例如,我连续有两列,如果我选择整行并尝试将其复制并粘贴到记事本中,则会出现密码。我是Java编程领域的新手,如果有人可以提供帮助将非常有帮助。
您想要的是相当合乎逻辑的。从表中复制粘贴数据时,应遵循呈现方式。
标准复制操作将使用模型中可用的数据,其中密码以纯文本形式提供。我们可以开始讨论是否要让模型包含纯文本形式的密码,而没有对其应用任何哈希运算法则…但是那不能回答您的问题。
对于您的问题,您应该修改的剪切/复制操作的行为JTable
。查看拖放式Swing教程,更具体地看一下Adding
Cut,Copy和Paste部分
。不幸的是,我没有立即找到要引用的示例。
编辑
在下面找到一个示例,该示例JXTable
使用呈现值进行复制操作(我没有复制粘贴导入内容)。关于代码的一点说明:
TableModel
及其元素非常愚蠢。为了避免过多的工作,我需要与我们的真实产品相似的东西,以便能够复制一些代码SpeedStringValue
和AltitudeStringValue
类违反了StringValue
他们返回接口null
。我懒得定义一个新接口,并且StringValue
我在SwingX上设置的实例的DefaultTableRenderer
行为与文档一致。但是,我认为拥有单独的StringValue
实例(每个实例都具有将特定类转换为实例的知识)String
是现实世界中的用例,SwingX
TransferHandler
重用StringValue
创建一个逻辑Table
只包含String
实例,然后倒在默认的JTable
行为。这允许重用渲染器中实现的逻辑,并允许复制视觉值而不是模型值。我不确定这是否是最好的解决方案,但是它可以工作。但是,如果在中有类似行为是标准的SwingX
,那就太好了,因为他们已经有了基础架构 public class TableTransferHandlerDemo {
public static void main( String[] args ) throws InvocationTargetException, InterruptedException {
EventQueue.invokeAndWait( new Runnable() {
public void run() {
JFrame frame = new JFrame( "TestFrame" );
JPanel contentPane = new JPanel( new BorderLayout( ) );
contentPane.add( createTable(), BorderLayout.CENTER );
frame.getContentPane().add( contentPane );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.pack();
frame.setVisible( true );
}
} );
}
private static CompositeStringValue createStringValue() {
CompositeStringValue stringValue = new CompositeStringValue();
stringValue.delegates.add( new AltitudeStringValue() );
stringValue.delegates.add( new SpeedStringValue() );
return stringValue;
}
public static JXTable createTable(){
final JXTable table = new JXTable( );
table.setSelectionMode( ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );
table.setModel( createTableModel() );
CompositeStringValue stringValue = createStringValue();
table.setDefaultRenderer( Object.class, new DefaultTableRenderer( stringValue ) );
table.setTransferHandler( new TableTransferHandler( table, stringValue ) );
//make sure ctrl-c triggers a copy
InputMap inputMap = table.getInputMap( JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_C, InputEvent.CTRL_MASK ), "copyAction" );
table.getActionMap().put( "copyAction", new AbstractAction() {
public void actionPerformed( ActionEvent e ) {
ActionEvent event = new ActionEvent( table, e.getID(), e.getActionCommand(), e.getWhen(), e.getModifiers() );
TransferHandler.getCopyAction().actionPerformed( event );
}
} );
return table;
}
public static class Speed{
public double speed;
public String unit = "km/h";
public Speed( double speed ){ this.speed = speed;}
}
public static class Altitude{
public double altitude;
public String unit = "m";
public Altitude( double altitude ){ this.altitude = altitude; }
}
public static class SpeedStringValue implements StringValue{
public String getString( Object o ) {
if ( o instanceof Speed ){
return ( ( Speed ) o ).speed + ( ( Speed ) o ).unit;
}
return null;
}
}
public static class AltitudeStringValue implements StringValue{
public String getString( Object o ) {
if ( o instanceof Altitude ){
return ( ( Altitude ) o ).altitude + ( ( Altitude ) o ).unit;
}
return null;
}
}
public static class CompositeStringValue implements StringValue{
public List<StringValue> delegates = new ArrayList<StringValue>( );
public String getString( Object o ) {
for ( StringValue stringValue : delegates ) {
String string = stringValue.getString( o );
if ( string != null ) return string;
}
return o != null ? o.toString() : "null";
}
}
public static TableModel createTableModel(){
return new DefaultTableModel(
new Object[][]{ new Object[]{ new Speed( 10 ), new Altitude( 100 )},
new Object[]{ new Speed( 20 ), new Altitude( 200 ) }},
new Object[]{"Speed", "Altitude"} );
}
public static class TableTransferHandler extends TransferHandler{
private JXTable table;
private StringValue stringValue;
public TableTransferHandler( JXTable aTable, StringValue aStringValue ) {
table = aTable;
stringValue = aStringValue;
}
@Override
public void exportToClipboard( JComponent aComponent, Clipboard aClipboard, int aAction ) throws IllegalStateException {
JTable table = createTable();
table.getTransferHandler().exportToClipboard( table, aClipboard, aAction );
}
@Override
public void exportAsDrag( JComponent aComponent, InputEvent aEvent, int aAction ) {
JTable table = createTable();
table.getTransferHandler().exportAsDrag( table, aEvent, aAction );
}
@Override
protected Transferable createTransferable( JComponent c ) {
//this transfer handler should not create any transferables
return null;
}
/**
* Create a table, representing the JXTable containing only Strings
*/
private JTable createTable() {
JTable table = new JTable( new StringTableModel( this.table, stringValue ) );
table.setSelectionModel( this.table.getSelectionModel() );//make sure the selection is synced
return table;
}
}
private static class StringTableModel extends AbstractTableModel {
private JXTable delegateTable;
private StringValue stringValue;
private StringTableModel( JXTable aTable, StringValue aStringValue ) {
delegateTable = aTable;
stringValue = aStringValue;
}
public int getRowCount() {
return delegateTable.getModel().getRowCount();
}
public int getColumnCount() {
return delegateTable.getModel().getColumnCount();
}
public Object getValueAt( int aRowIndex, int aColumnIndex ) {
return stringValue.getString( delegateTable.getValueAt( aRowIndex, aColumnIndex ) );
}
}
}
我有一个500行的txt文件打开在VI,我想复制整个文件从VI并粘贴到记事本 我试过把整个文档都拉过来,但我不知道怎么把它粘贴到记事本里
我正在使用。我刚刚检查了我的编码类,发现它的字节代码显示了我的加密密码在类中的原样。我真的开始担心我所有数据的安全性。如果有人黑了我的类,那么我的数据会发生什么。为什么java类不将字符串名和值转换为字节码?
问题内容: 当开发人员想要保护自己的Web应用程序安全时,Spring Security非常有用。 但是,如何创建帐户呢?和“忘记密码”?大多数登录页面都具有这些链接以及用户名和密码字段。Spring的默认登录页面没有这些链接…在很好的情况下,它可以支持“记住我” … Spring是否支持创建帐户,忘记密码和更改密码这些流程?如果答案是肯定的,您能给我指出一些文件吗? 我已经搜索了此问题,但找不到
我在远程服务器上有一个git repo,并使用ssh和密码身份验证来克隆、拉、推。从命令行,一切正常。 但是在 vscode 中,当我尝试从远程存储库拉取或推送时,没有显示密码提示。Vscode似乎在等待什么,但什么也没发生。这是一个错误,还是我做错了什么? 我想在linux上使用visualstudio代码作为git客户端。 从命令行: 在vscode中:
问题内容: 这个问题很简单,由于某种原因我无法获得正确的结果以仅显示重复记录 样本输出 预期产量 我如何做到这一点? 问题答案: sqlfiddle
问题内容: 我需要将多行bash代码粘贴到终端中,但是每当粘贴时,每行都会在粘贴后立即作为单独的命令运行。 问题答案: 复制之前,请尝试将其放在每行的末尾。