Avatar billede tummas Nybegynder
12. august 2002 - 08:39 Der er 4 kommentarer og
1 løsning

Jtable + Mouse og reg af click

jeg har i følgende prg "en dags-tabel", hvor selve tabellen er sat til, at man ikke skal kunne skrive i felterne, men via et dobbelt-klik, skal der enten hældes forvalgte data ind, hvis feltet er tomt.
Hvis der står data i feltet skal disse hentes ud..
Koden er vedlagt - på forhånd tak

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;

class PlanTabelFrame extends JFrame {

  public PlanTabelFrame( String title ) {
    super( title );
   
    PlanTabelModel tableModel = new PlanTabelModel();

    JTable tableView = new JTable( tableModel );
   
    // Renderer til centreret tekst
    tableView.getColumn( tableModel.getColumnName( 0 ) )
      .setCellRenderer( new CentreretTextRenderer() );
   
    for ( int col=2; col<tableModel.getColumnCount(); col++ )
      tableView.getColumn( tableModel.getColumnName( col ) )
        .setCellRenderer( new CentreretTextRenderer() );
   
    // plads til stationsnavn
    tableView.getColumn( tableModel.getColumnName( 1 ) )
      .setPreferredWidth( 170 );
   
    JScrollPane pane = new JScrollPane( tableView );

    getContentPane().add( pane, BorderLayout.CENTER );
   
    addWindowListener( new ApplicationTerminator() );
    setSize( 500, 100 );
    setVisible( true );
  }
 
  class ApplicationTerminator extends WindowAdapter {
    public void windowClosing( WindowEvent e ) {
      System.exit( 0 );
    }
  }
}

fil 2 = model for JTable

import javax.swing.table.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;

class SkemaTableModel extends AbstractTableModel
{
    public static final String[] TILSTANDE =
    { " ","  Anders Sørensen  ", " Erhverv", " Privat", " Manøvrebane", " ???" };

  private String[][] skema;
  int row=0;
  int col=0;
 
  public static final String[] DAGE =
/*  {    "Mandag",
    "Tirsdag",
    "Onsdag",
    "Torsdag",
    "Fredag",};
*/
        {"Elev","Bemærkning" };
         
  private String[] tider =
  {    " 07:00"," 07:15"," 07:30"," 07:45",
      " 08:00"," 08:15"," 08:30"," 08:45",
      " 09:00"," 09:15"," 09:30"," 09:45",
      " 10:00"," 10:15"," 10:30"," 10:45",
      " 11:00"," 11:15"," 11:30"," 11:45",
      " 12:00"," 12:15"," 12:30"," 12:45",
      " 13:00"," 13:15"," 13:30"," 13:45",
      " 14:00"," 14:15"," 14:30"," 14:45",
      " 15:00"," 15:15"," 15:30"," 15:45",
      " 16:00"," 16:15"," 16:30"," 16:45",
      " 17:00"," 17:15"," 17:30"," 17:45",
      "Natte-kørsel",
  };
 
  public void udskriv()
  {
      for ( int dag=0; dag<1; dag++ )
        for ( int lektion=0; lektion<48; lektion++ )
          System.out.println( skema[dag][lektion] );    // indhold til gem og hent
  }
 
  public SkemaTableModel()
  {
      skema = new String[DAGE.length][tider.length];
   
    for ( int dag=0; dag<DAGE.length; dag++ )
      for ( int lektion=0; lektion<tider.length; lektion++ )
        skema[dag][lektion] = TILSTANDE[0];    // indhold til gem og hent
  }
 
  public String getColumnName( int col )
  {
    if ( col > 0 )
      return DAGE[col-1];
    else
      return "Kl.";
  }
 
  public int getColumnCount() {
    return DAGE.length + 1;
  }

  public int getRowCount() {
    return tider.length;
  }
 
  public boolean isCellEditable( int row, int col )
  {
    if ( col > 0 && skema[col-1][row].length()>0)
    {
        return true;
    }
    else
    {
        return false;
    }
  }
 
    // kommer efter indskrivning <enter> eller <tab> eller anden flytning
  public void setValueAt( Object value, int row, int col )
  {
      String indTxt = (String)value;
      String udTxt = skema[col-1][row];
      String txt="Torben";
      String[] sList = {"Ja", "Nej"};
     
    //if( udTxt.length()>1 && col > 0 && indTxt.length()==1)
    if( udTxt.equals(indTxt) && col > 0 && udTxt.length()>1)
    {
        int option = JOptionPane.showOptionDialog(null,
                    "Vil du hente elevens oplysninger",
                    " Hente Elev - Oplysninger", JOptionPane.YES_NO_OPTION,
                    JOptionPane.WARNING_MESSAGE, null, sList, sList[0]);
      if( option == 0)
          skema[col-1][row] = txt;
          System.out.println(" UD    "+indTxt+"    "+udTxt );
    }
    else
    if( indTxt.length()==1 && col > 0 && udTxt.equals(" ") )
    {
        int option = JOptionPane.showOptionDialog(null,
                    "Vil du indføre en tids-bestilling for "+txt,
                    " Reserver en Køre - Tid", JOptionPane.YES_NO_OPTION,
                    JOptionPane.WARNING_MESSAGE, null, sList, sList[0]);
      if( option == 0)
          skema[col-1][row] = txt;
          System.out.println(" TOM    "+indTxt+"    "+udTxt );
    }
    else
    if( indTxt.length()<2 && col > 0 && udTxt.length()>0)
    {
        int option = JOptionPane.showOptionDialog(null,
                    "Du er ved at slette en tids-bestilling",
                    "  Slet en Køre - Tid", JOptionPane.YES_NO_OPTION,
                    JOptionPane.WARNING_MESSAGE, null, sList, sList[0]);
      if( option == 0)
          skema[col-1][row] = " ";
          System.out.println(" SLET    "+indTxt+"    "+udTxt );
    }
        else
    if( indTxt.length()>0 && col > 0 && udTxt.length()==1)
    {
        skema[col-1][row] = indTxt;
        System.out.println(" IND    "+indTxt+"    "+udTxt );
    }
 
    }
   
    // kører når musen bevæges d.v.s hele tiden
  public Object getValueAt( int row, int col )
  {
    if ( col > 0 )
    {
//        boolean ok =isCellSelected(row,col);
//        if( ok=false)
//            System.out.println(row+" - "+col);
      return skema[col-1][row];
    }
    else
      return tider[row];
  }

//*********************************************************
 
  public int getSelectedRow()
    {
        System.out.println("Selected Row");
        return row;
    }
       
  public int getSelectedColomn()
    {
        System.out.println("Selected Col");
        return col;
    }

  //*** kører når mus bevæges d.v.s hele tiden
  public boolean isCellSelected(int row,int col)
  {
      //System.out.println("Selected");
      return true;
  }
 
  public boolean isEditing()
  {
      System.out.println("Editing");
      return true;
  }
 
  public int getEditingRow()
  {
      System.out.println("Row = ");
      return -1;
  }
 
  public int getEditingColumn()
  {
      System.out.println("Col = ");
      return -1;
  }

}
Avatar billede emileej Nybegynder
13. august 2002 - 09:40 #1
class PlanTabelFrame extends JFrame miplements MouseListener{

Jeg kan ikke helt huske hvilke funktioner det følger med MouseListener interfacet, men hvis du bruger Sun One (Forte) udviklingsmiljøet, bliver fuktionerne automatisk sat ind når du har skrevet din implements sætning...

Ellers søg på MouseListener på een eller anden Java ref. side - eller hvis du har en bog (Java 2 Bible kan varmt anbefalse)

E-)mil
Avatar billede tummas Nybegynder
13. august 2002 - 14:25 #2
Ja der findes mange gode bøger men problemet er at jeg ikke kan finde det relevante. Kodestump søges!!!!
Avatar billede jword Nybegynder
13. august 2002 - 14:54 #3
Prøv at poste noget kode der faktisk kan køre.
Avatar billede emileej Nybegynder
13. august 2002 - 19:58 #4
class PlanTabelFrame extends JFrame miplements MouseListener{
...
public PlanTabelFrame(...){
    ...
    addMouseListener(this);
}
...
}

Prøv så at compile - så vil du få nogle errors om at du ikke har defineret de funktioner, der følger med MouseListener interfacet - de er beskrevet fuldt ud i fejlmeddelelsen.

E-)mil
Avatar billede emileej Nybegynder
21. august 2002 - 15:38 #5
Du fik det altså til at fungere?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester