Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Java CheckBox reader märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale. Teata moderaatorile
otsing:  
brixxx
Lõuapoolik
Lõuapoolik
brixxx

liitunud: 04.01.2012




sõnum 01.12.2013 03:06:45 Java CheckBox reader vasta tsitaadiga

Üritan luua rakendust, kus on tabel ja teine veerg on CheckBoxid, kui valid ühe CheckBoxi, siis tuleb teatud teada erinevate CheckBoxidel erinev teade. Aga probleem on selles, et minu if tingimus näitab õigesti teateid kui viimase rea CheckBox valida ja edasi üles poole liikuda kui liikuda ülevalt alla, siis annab iga CheckBoxi valides esimese CheckBoxi teate. Kui oled valinud ühe CheckBoxi ja eemaldad sealt linnuke, siis ei kao teade, vaid tuleb uus teada. Mis on if tingimuse viga ning mida peaks korrigeerima?

package test.ee;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

import java.awt.Dimension;
import java.awt.GridLayout;

/**
* TableDemo is just like SimpleTableDemo, except that it
* uses a custom TableModel.
*/
@SuppressWarnings("serial")
public class TableDemo extends JPanel {

   public TableDemo() {
        super(new GridLayout(1,0));

        JTable table = new JTable(new MyTableModel());
        table.setPreferredScrollableViewportSize(new Dimension(200, 300));
        table.setFillsViewportHeight(true);

        //Create the scroll pane and add the table to it.
        JScrollPane scrollPane = new JScrollPane(table);

        //Add the scroll pane to this panel.
        add(scrollPane);
    }

    class MyTableModel extends AbstractTableModel {
       Object[][] rows = {{"One", false}, {"Two", false}, {"Three", false}};
       Object columns[] = {"A", "B"};

        public int getColumnCount() {
            return columns.length;
        }

        public int getRowCount() {
            return rows.length;
        }

        public Object getColumns(int col) {
            return columns[col];
        }

        public Object getValueAt(int row, int col) {
            return rows[row][col];
        }

        /*
         * JTable uses this method to determine the default renderer/
         * editor for each cell.  If we didn't implement this method,
         * then the last column would contain text ("true"/"false"),
         * rather than a check box.
         */
      @SuppressWarnings({ "unchecked", "rawtypes" })
      public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }

        /*
         * Don't need to implement this method unless your table's
         * editable.
         */
        public boolean isCellEditable(int row, int col) {
            //Note that the data/cell address is constant,
            //no matter where the cell appears onscreen.
            if (col < 0) {
                return false;
            } else {
                return true;
            }
         
        }

        /*
         * Don't need to implement this method unless your table's
         * data can change.
         */
        public void setValueAt(Object value, int row, int col) {
           
            rows[row][col] = value;
            fireTableCellUpdated(row, col);
         
           
            if((boolean)getValueAt(0,1)) {
               System.out.println("One");
            } else if ((boolean)getValueAt(1,1)) {
               System.out.println("Two");
            } else if ((boolean)getValueAt(2,1)) {
               System.out.println("Three");
            }
           }
       
        }

        /*@SuppressWarnings("unused")
      private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getComponentCount();

            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + rows[i][j]);
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }


    private int getRowCount() {
         // TODO Auto-generated method stub
         return 0;
      }*/


   /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        TableDemo newContentPane = new TableDemo();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
tagasi üles
vaata kasutaja infot saada privaatsõnum
Hannes81
HV vaatleja
Hannes81

liitunud: 19.07.2006



Autoriseeritud ID-kaardiga

sõnum 01.12.2013 12:55:47 vasta tsitaadiga

Hetkel kui sul on esimene kast selectitud, siis esimene if-tingimus on alati true, seega väljastatakse "One" ning kuna teised pole eraldi if laused, vaid on else-if'id, siis nendega ei tegeleta, vaid
minnakse edasi. Kui sa tahad, et iga valiku tegemisel väljastastatakse kõik read, mis on selectitud, siis pane else-if asemel lithsalt uued if laused.

Midagi sellist näiteks, et saada aru, mis koodis toimub


if((boolean)getValueAt(0,1)) {
    System.out.print("One");
}
if ((boolean)getValueAt(1,1)) {
    System.out.print("Two");
}
if ((boolean)getValueAt(2,1)) {
    System.out.print("Three");
}
System.out.println();
Kommentaarid: 19 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 18
tagasi üles
vaata kasutaja infot saada privaatsõnum
brixxx
Lõuapoolik
Lõuapoolik
brixxx

liitunud: 04.01.2012




sõnum 01.12.2013 15:25:23 vasta tsitaadiga

Hannes81 kirjutas:
Hetkel kui sul on esimene kast selectitud, siis esimene if-tingimus on alati true, seega väljastatakse "One" ning kuna teised pole eraldi if laused, vaid on else-if'id, siis nendega ei tegeleta, vaid
minnakse edasi. Kui sa tahad, et iga valiku tegemisel väljastastatakse kõik read, mis on selectitud, siis pane else-if asemel lithsalt uued if laused.

Midagi sellist näiteks, et saada aru, mis koodis toimub


if((boolean)getValueAt(0,1)) {
    System.out.print("One");
}
if ((boolean)getValueAt(1,1)) {
    System.out.print("Two");
}
if ((boolean)getValueAt(2,1)) {
    System.out.print("Three");
}
System.out.println();

Mul oli selline kood, aga muutsin selle ära elseif-ks kuna siis viimasest üles poole CheckBoxe kuvab teateid õigesti ehk "Three, Two, One", aga aga ülevalt alla valides kuvab "One, One, One". Aga selle koodiga kuvab "One, One, Two, One, Two, Three", sellest tahaks lahti saada, et kuvaks vaid "One, Two, Three" ning elsif mingil määral lahendas probleemi, probleem hetkel selles, et ülevalt alla valides kuvaks õigesti ning linnukese eemaldades eemaldaks ka teate.
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Java CheckBox reader
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.