tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
1375
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    tomtutor0815 tomtutor0815 ist offline Grünschnabel
    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.
     

  2. #2
    Chimaira Chimaira ist offline Mitglied Gold
    Registriert seit
    May 2005
    Beiträge
    143
    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
    Code java:
    1
    2
    3
    
        public void keyPressed(KeyEvent arg0) {
            System.out.println(arg0.getKeyCode());
        }
    aus

    Greeze Chimaira
    Geändert von Chimaira (14.03.08 um 07:21 Uhr)
     

  3. #3
    MeinerEiner_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)
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    public void keyPressed(KeyEvent evt){
               if(evt.getKeyCode() == KeyEvent.VK_ENTER){
               ...
               }
     
     
    }
    *grüssle*
    MeinerEiner
     

  4. #4
    tomtutor0815 tomtutor0815 ist offline Grünschnabel
    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.
     

  5. #5
    MeinerEiner_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*
    MeinerEiner
    Geändert von MeinerEiner_80 (14.03.08 um 10:21 Uhr)
     

  6. #6
    Ryu20 Ryu20 ist offline Mitglied Silber
    Registriert seit
    Oct 2004
    Beiträge
    64
    Hi hier mal ein Beispiel das nach deinem Prinzip funktionieren sollte.

    TableSample.java
    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
    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
            
        }
    }
    JFrameSample.java
    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);
        }
    }
    Dies zeigt nur 1 Möglichkeit.
     

  7. #7
    tomtutor0815 tomtutor0815 ist offline Grünschnabel
    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

  1. JTable Checkbox mehere Zeilen auswählen
    Von =fire= im Forum Java
    Antworten: 4
    Letzter Beitrag: 03.01.11, 21:31
  2. JTable - Zellen nach Farbe auswählen
    Von DragQueenMum im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 21.09.06, 10:01
  3. standardmäßig 1. zeile in jtable auswählen
    Von Shizzl_chrizzl im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 01.12.04, 12:59
  4. DataGrid: Auswählen mittels Enter
    Von daJunior im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 30.06.04, 11:54
  5. Kein Datei-Auswählen-Fenster
    Von Vitei im Forum Linux & Unix
    Antworten: 5
    Letzter Beitrag: 24.10.03, 23:28