セルを編集可能にした場合と同じようにセルを動作させたい JTable がありますが、セルを編集可能にすることはできません。つまり、読み取り専用です。したがって、セルをダブルクリックすると、セル内のテキストのみを選択し、そのセルからテキストをコピーできるはずです。
1609 次
3 に答える
5
ユーザーが変更を加えるのを防ぐことは可能ですか?
カスタム エディターを使用する必要があります。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.text.*;
public class TableCopyEditor extends JPanel
{
public TableCopyEditor()
{
String[] columnNames = {"Editable", "Non Editable"};
Object[][] data =
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane( table );
add( scrollPane );
// Create a non-editable editor, but still allow text selection
Caret caret = new DefaultCaret()
{
public void focusGained(FocusEvent e)
{
setVisible(true);
setSelectionVisible(true);
}
};
caret.setBlinkRate( UIManager.getInt("TextField.caretBlinkRate") );
JTextField textField = new JTextField();
textField.setEditable(false);
textField.setCaret(caret);
textField.setBorder(new LineBorder(Color.BLACK));
DefaultCellEditor dce = new DefaultCellEditor( textField );
table.getColumnModel().getColumn(1).setCellEditor(dce);
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("Table Copy Editor");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new TableCopyEditor() );
frame.pack();
frame.setLocationByPlatform( true );
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
于 2013-06-18T19:32:54.233 に答える
1
テーブルでセル選択が有効になっている場合、デフォルトで、選択したセルからコピー/貼り付けできます。
以下は、セル選択がオンになっている読み取り専用の JTable と、貼り付け先の JTextField を使用したデモです。
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableCellSelectionDemo implements Runnable
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new TableCellSelectionDemo());
}
public void run()
{
String[] columnNames = {"First", "Last"};
Object[][] data =
{
{"Barney", "Rubble"},
{"Fred", "Flintstone"}
};
DefaultTableModel model = new DefaultTableModel(data, columnNames)
{
@Override
public boolean isCellEditable(int row, int column)
{
return false;
}
};
JTable table = new JTable(model);
table.setCellSelectionEnabled(true);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scroll = new JScrollPane(table);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scroll.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
JTextField text = new JTextField(40);
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(scroll, BorderLayout.CENTER);
frame.getContentPane().add(text, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
于 2013-06-18T19:28:28.367 に答える