ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
1375
1375
EMPFEHLEN
-
14.03.08 00:06 #1
- Registriert seit
- Mar 2008
- Beiträge
- 3
Hi,
innerhalb eines JFrame wird ein zweites JFrame erzeugt, in dem daten aus deiner DB(oracle)
angezeigt werden- mittels JTable. Die ergebnissmenge ist sagen wir 10 rows. Das wird korrekt in einer JTable angezeigt. Nun möchte ich mit den cursor tasten auf eine row positionieren und mit <ENTER> auswählen. daraufhin soll das JFrame mit dem JTable geschlossen werden und die ausgewählte zeile an das haupt-Fenster (JFrame) übergeben werden. Ebenso soll eine zeile mit einem Doppelclick ausgewählt werden können, und das JTable geschlossen werden.
soweit so gut.
Das einzige was ich nicht hin bekomme ist, den doppelclick bzw. die Entertaste abzufragen.
Ich hab eine KeyListner und MouseListner der Jtable zugewiesen. Aber wie frage ich ab,
was passiert ist?
public void getTableItem(String[][] daten, String [] columnNames){
JFrame jFrame = new JFrame();
// JTable table = new JTable(daten, columnNames );
JTable table = new JTable(new xTableModel(daten, columnNames));
final TableKeyEventHandler tableKeyEventHandler = new TableKeyEventHandler();
final TableMouseEventHandler tableMouseEventHandler = new TableMouseEventHandler();
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.addKeyListener(tableKeyEventHandler);
table.addMouseListener(tableMouseEventHandler);
table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
ListSelectionModel rowSM = table.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
ListSelectionModel lsm = (ListSelectionModel)e.getSource();
if (lsm.isSelectionEmpty()) {
System.out.println("No rows are selected.");
} else {
int selectedRow = lsm.getMinSelectionIndex();
hier müsste man abfragen ob <entertaste> oder doppelclick
passiert ist. wie geht das? wie muss der listner dazu aussehen
tableKeyEventHandler.keyPressed(?)
System.out.println("Row " + selectedRow
+ " is now selected.");
}
}
});
jFrame.getContentPane().add( new JScrollPane(table) );
// jFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
jFrame.pack();
jFrame.setVisible( true );
}
vielen dank für eure hilfe.
-
du solltest den KeyListener so implementieren (also den KeyCode abfragen):
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
public class blabla implements KeyListener{ ... public void keyPressed(KeyEvent arg0) { if(arg0.getKeyCode() == 10){ ... } } public void keyReleased(KeyEvent arg0) { } public void keyTyped(KeyEvent arg0) { } ... }
KeyCode 10 ist <ENTER> - Alle anderen KeyCodes werden dann ignoriert. Ich hoffe den Rest kannste dir selber erarbeiten
Bin noch zu müde zum denken ... xD
Und mal ein Tipp. Wenn du mal einen Tastencode suchst, gib ihn einfach per
aus
Greeze ChimairaGeändert von Chimaira (14.03.08 um 07:21 Uhr)
-
14.03.08 08:30 #3MeinerEiner_80 Tutorials.de Gastzugang
Moin!
Man kann sich die lästige Sucherei nach dem numerischen Wert des KeyCode auch ganz einfach sparen, in dem man den KeyCode des Events einfach mit den vorgefertigten Konstanten vergleicht: (gibts für jede Taste und kann man leicht in der API nachschauen)
*grüssle*Code :1 2 3 4 5 6 7
public void keyPressed(KeyEvent evt){ if(evt.getKeyCode() == KeyEvent.VK_ENTER){ ... } }
MeinerEiner
-
14.03.08 09:50 #4
- Registriert seit
- Mar 2008
- Beiträge
- 3
vielen dank für die antworten.
den keylistner (und einen mouslistner) hab ich in dieser form bereits implementiert.
mein problem (vielleicht hab ichs nicht beschrieben) liegt darin:
der jtable - viewer (die methode getTableItem) die ich gepostet habe, liegt in einer klasse A
der listner liegt in einer anderen klasse, sagen wir B
wie komme ich nun in der klasse A an die information die in B ermittelt wurde?
ich glaube ich stehe voll auf der leitung...?
also nochmal technisch:
-----------------------------------------------------------------------
klasse A
...
TabKeyEvent tabKeyEvent = new TabKeyEvent();
table.addKeyListener(tabKeyEvent);
wie komme ich hier an das event
...
--------------------------------------------------------------------------------------
klasse B
public class TabKeyEvent implements KeyListener {
public TabKeyEvent() {
// TODO Auto-generated constructor stub
}
public void keyPressed(KeyEvent e) {
}
vielen dank nochmals.
-
14.03.08 10:16 #5MeinerEiner_80 Tutorials.de Gastzugang
Moin!
Halte dich doch bitte an die Netiquette bezüglich Klein- und Großschreibung!
Du solltest dich auch mal ein bisschen mehr in Java einlesen. Wie man Daten von einem Objekt an ein anderes übergibt sind Grundlagen!
Generell: Es gibt viele Möglichkeiten zur Lösung dieses "Problems". Eine wäre (wenn wir mal bei deinem Beispiel bleiben), eine Referenz von Klasse A per Konstruktor an Klasse B zu übergeben. Sobald das Event eintrifft, kannst du dann eine Methode von A (die es dann noch zu implementieren gilt) von B mit diesem Event als Argument aufrufen.
*grüssle*
MeinerEinerGeändert von MeinerEiner_80 (14.03.08 um 10:21 Uhr)
-
Hi hier mal ein Beispiel das nach deinem Prinzip funktionieren sollte.
TableSample.java
JFrameSample.javaCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class TableSample extends JFrame implements KeyListener, MouseListener{ private JFrameSample sample; private JTable table; public TableSample(JFrameSample sample) { this.setLayout(new GridLayout(1,0)); this.sample = sample; String[] columnNames = {"1", "2", "3", "4"}; Object[][] data = { {"A", "B", "C", new Integer(1)}, {"D", "E", "F", new Integer(2)}, {"G", "H", "I", new Integer(3)}, {"J", "K", "L", new Integer(4)}, {"M", "N", "O", new Integer(50)} }; table = new JTable(data, columnNames){ @Override public boolean isCellEditable(int arg0, int arg1) { // TODO Auto-generated method stub return false; } }; table.setPreferredScrollableViewportSize(new Dimension(500, 70)); table.setFillsViewportHeight(true); table.setColumnSelectionAllowed(true); table.getTableHeader().setReorderingAllowed(true); table.addKeyListener(this); table.addMouseListener(this); JScrollPane scrollPane = new JScrollPane(table); this.add(scrollPane); createAndShowGUI(); } private void createAndShowGUI() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.pack(); this.setVisible(true); } @Override public void keyPressed(KeyEvent ev) { // TODO Auto-generated method stub if (ev.getKeyCode() == KeyEvent.VK_ENTER){ String text = (String) table.getValueAt(table.getSelectedRow(), table.getSelectedColumn()); sample.doSomething(text); this.dispose(); } } @Override public void keyReleased(KeyEvent arg0) { // TODO Auto-generated method stub } @Override public void keyTyped(KeyEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseClicked(MouseEvent ev) { // TODO Auto-generated method stub if (ev.getClickCount() == 2){ String text = (String) table.getValueAt(table.getSelectedRow(), table.getSelectedColumn()); sample.doSomething(text); this.dispose(); } } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } }
Dies zeigt nur 1 Möglichkeit.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class JFrameSample implements ActionListener{ JLabel lb_test; private void createAndShowGUI() { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); lb_test = new JLabel(""); JButton bt_Action = new JButton("Action"); bt_Action.addActionListener(this); frame.add(lb_test, BorderLayout.CENTER); frame.add(bt_Action, BorderLayout.SOUTH); frame.setSize(100, 100); frame.setVisible(true); } public JFrameSample(){ createAndShowGUI(); } public static void main(String[] args) { new JFrameSample(); } public void doSomething(String text){ this.lb_test.setText(text); } @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub new TableSample(this); } }
-
15.03.08 00:20 #7
- Registriert seit
- Mar 2008
- Beiträge
- 3
@Ryu20
public void keyPressed(KeyEvent ev) {
// TODO Auto-generated method stub
if (ev.getKeyCode() == KeyEvent.VK_ENTER){
String text = (String) table.getValueAt(table.getSelectedRow(), table.getSelectedColumn());
sample.doSomething(text);
this.dispose();
}
}
Das war der entscheidende Hinweis.
Vielen Dank.
Ähnliche Themen
-
JTable Checkbox mehere Zeilen auswählen
Von =fire= im Forum JavaAntworten: 4Letzter Beitrag: 03.01.11, 21:31 -
JTable - Zellen nach Farbe auswählen
Von DragQueenMum im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 21.09.06, 10:01 -
standardmäßig 1. zeile in jtable auswählen
Von Shizzl_chrizzl im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 01.12.04, 12:59 -
DataGrid: Auswählen mittels Enter
Von daJunior im Forum .NET ArchivAntworten: 1Letzter Beitrag: 30.06.04, 11:54 -
Kein Datei-Auswählen-Fenster
Von Vitei im Forum Linux & UnixAntworten: 5Letzter Beitrag: 24.10.03, 23:28





Zitieren
Login





