Avatar billede jsl Nybegynder
17. juli 2005 - 17:51 Der er 5 kommentarer og
1 løsning

changeSelection() problem!

Når man vælger en ny række i jdbTable'en, skal der kontrollers for om ændringer er foretaget i den tidligere række. Hvis det er tilfældet skal man blive spurgt om, om ændringerne skal gemmes. Når der foretages ændringer, sættes gem-knappen til aktiv: jButton8.setEnabled(true). Herved kan der let tjekkes for om, der overhodet er foretaget ændringer i rækken, ved at tjekke for om jButton8 er aktiv eller ej. Yderligere skal det tjekkes for om der er valgt en ny række, og jeg har forsøgt at bruge valueChanged(ListSelectionEvent e) til det, men det er ikke blevet så godt.
Jeg ved ikke helt, hvordan jeg kontrollere for en ny række er valgt, og hvordan jeg får det til at passe ind i det jeg her har lavet. Hvis Cancel vælges, skal den tidligere række vælges.

public void changeSelection(int row, int column, boolean toggle, boolean extend) {
  JTable tce = new CustomEditor(jdbTable2);
  if (!jButton8.isEnabled()) {
    super.changeSelection(row, column, toggle, extend);
  }
  else (jButton8.isEnabled() && [Er en ny række valgt?]) {
    int selection = JOptionPane.showConfirmDialog(null,"Vil du gemme ændringerne","Gem ændringer....", JOptionPane.WARNING_MESSAGE);
    if (selection == JOptionPane.YES_OPTION) {
      saveDataset();
    }
    else (selection == CANCEL_OPTION) {
    }
  }
}};
Avatar billede jsl Nybegynder
18. juli 2005 - 11:40 #1
Ok, nu har jeg løst problemet, men hvordan disabler jeg keyboardet, fordi den nedadgående piltast er stadig aktiv. Man kan altså vælge ny rækkke med den, selvom det ikke skulle være tilladt. Det er kun denne piltast, der driller mig.
Avatar billede _carsten Nybegynder
20. juli 2005 - 22:02 #2
Undskyld - Undskyld - at jeg brændte dig af, fik feriekuller og glemte alt om dit spørgsmål herinde !

Løsning:
Hemmeligheden ligger i lave en editor der ikke kan forlades, med mindre der på en eller anden måde er taget stilling teksten i cellen - se eksempel.

Vender tilbage i morgen aften !!





import javax.swing.*;
import javax.swing.table.TableColumn;
import java.util.EventObject;

public class ValidateTableCellTest extends javax.swing.JFrame {
   
    public ValidateTableCellTest() {
        initComponents();
    }
   
    private void initComponents() {
        scroll = new javax.swing.JScrollPane();
        table = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        table.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"Kolonne 2 valideres", null, null},
                {"Kolonne 2 valideres", null, null},
                {"Kolonne 2 valideres", null, null},
                {"Kolonne 2 valideres", null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3"
            }
        ));
        scroll.setViewportView(table);

        getContentPane().add(scroll, java.awt.BorderLayout.CENTER);

        TableColumn col = table.getColumnModel().getColumn(1);
        col.setCellEditor(new ValidationEditor(new JTextField(), table));

        pack();
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ValidateTableCellTest().setVisible(true);
            }
        });
    }

    private javax.swing.JScrollPane scroll;
    private javax.swing.JTable table;
}






// ********** Editoren i kolonne 2 *************

class ValidationEditor extends DefaultCellEditor {

    public ValidationEditor(JTextField field) {
        super(field);
    }
   
    public ValidationEditor(JTextField field, JTable tbl) {
        super(field);
        this.table = tbl;
    }
   
    public boolean stopCellEditing(){
        // Her ser du hvordan du får fat i celle editorens værdi
        // og værdien af cellen i tabellen, når du begynder redigering
        // af cellen, har tabelcelle og editor IKKE samme værdi !
        String editorVal = getCellEditorValue().toString();
        Object tableCellVal = table.getValueAt(table.getSelectedRow(), table.getSelectedColumn());

        // Af test hensyn har jeg valgt at man kun kan skrive "abc"
        // i denne kolonne, her skal du indsætte din if-sætning
        if(!editorVal.equals("abc")) {
            canCallCell = false;
            JOptionPane.showMessageDialog(null,
                    "Du kan kun skrive \"abc\" i dette felt",
                    "Fejl !",JOptionPane.ERROR_MESSAGE);
            return false;
        }
       
        canCallCell = true;
        return super.stopCellEditing();
    }
   
    public boolean shouldSelectCell(EventObject anEvent){
        if(canCallCell)
            return super.shouldSelectCell(anEvent);
        else
            getComponent().requestFocus();
            return false;
    }
   
    private boolean canCallCell = true;
    private JTable table;
}
Avatar billede _carsten Nybegynder
22. juli 2005 - 10:43 #3
Fik du løst problemet ???
Avatar billede jsl Nybegynder
15. august 2005 - 20:20 #4
carsten, giv lige et svar, så du kan få point.
Avatar billede _carsten Nybegynder
15. august 2005 - 20:22 #5
Kommer her

Er problemet løst ?
Avatar billede jsl Nybegynder
16. august 2005 - 20:29 #6
Jep. Tak for det!
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