Avatar billede jsl Nybegynder
24. september 2005 - 13:51 Der er 4 kommentarer og
1 løsning

itemStateChanged og rækkeskift i tabel

Jeg er ved at udvikle en database-applikation i Java, hvori jeg har en tabel, og en tilhørende combobox.
Når en ny række/post vælges i tabellen, skifter det valgte item ligeledes i combobox'en. Jeg har det lavet sådan, at når et item i combobox'en ændres til en given post, aktiveres en "gem-knap". Det er lavet på flg. simple måde:

    public void itemStateChanged(ItemEvent e) {
    if (e.getStateChange() != ItemEvent.SELECTED) {
            jBSave.setEnabled(false); //Gem-knappen
        }
    }
MEN problemet er, at denne kode afvikles også når en ny række vælges i tabellen, uden at jeg har valgt et nyt item i ombobox'en. Det er på sin vis, og logisk nok, når den valgte post er forskellige fra den "gamle" post.

Jeg forestiller mig lidt, at problemet kan løses ved at ignorere et itemskift når en ny post vælges.

Hertil tænker jeg på noget i retningen af flg. kode:

    int sel = jdbTable2.getEditingRow();
    selRow[1] = selRow[0];
    selRow[0] = sel;

Forslag?
Avatar billede _carsten Nybegynder
24. september 2005 - 14:30 #1
Tjaaa - måske

    public void itemStateChanged(ItemEvent e) {
    if (e.getStateChange() != ItemEvent.SELECTED) {
            if( isFocusOwner() )
                jBSave.setEnabled(false); //Gem-knappen
        }
    }

Burde kun enable knappen hvis combobox er focusOwner
Avatar billede jsl Nybegynder
24. september 2005 - 17:40 #2
Der skal istedet stå: jBSave.setEnabled(true)
Det virker desværre ikke. Når jeg printer isFocusOwner(), ser jeg, at metoden hele tiden er False, ligemeget om jeg trykker på comboboxen eller tabellen.
Jeg vil lige understrege, at knappen kun skal aktiveres, når brugeren ændre et item i comboboxen med f.eks. musen, og altså ikke når det ændres som følge af et rækkeskifte i tabellen.
Avatar billede _carsten Nybegynder
24. september 2005 - 19:06 #3
Prøv lige og leg lidt med den her, indsæt din kode i MyComboListener's itemStateChanged

import java.awt.event.ItemListener;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.table.TableColumn;


public class Exp3 extends javax.swing.JFrame {
   

    public Exp3() {
        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 [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        scroll.setViewportView(table);

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

    JComboBox combo = new JComboBox(new String[]{"A", "B", "C"});
        combo.addItemListener(new MyComboListener(combo));
        DefaultCellEditor editor = new DefaultCellEditor(combo);
        TableColumn col = table.getColumnModel().getColumn(1);
        col.setCellEditor(editor);
       
        pack();
    }

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

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





class MyComboListener implements ItemListener{
    public MyComboListener(){
        this(null);
    }
   
    public MyComboListener(JComboBox box){
        this.box = box;
    }

    public void itemStateChanged(java.awt.event.ItemEvent itemEvent) {
        if(box != null)
            System.out.println("FOCUSOWNER " + box.isFocusOwner());
    }
    private JComboBox box;
}
Avatar billede jsl Nybegynder
28. september 2005 - 19:55 #4
Det virker!
Smid et svar og du skal få point med det samme.
Avatar billede _carsten Nybegynder
28. september 2005 - 22:06 #5
Svar
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

IT-JOB

AP Pension

Løsningsarkitekt

BEC Financial Technologies

Business analyst (senior)

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Lead Data Platform Architect