praegune kellaaeg 26.04.2024 05:30:05
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
brixxx
Lõuapoolik
liitunud: 04.01.2012
|
01.12.2013 03:06:45
Java CheckBox reader |
|
|
Ü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 |
|
|
Hannes81
HV vaatleja
liitunud: 19.07.2006
|
01.12.2013 12:55:47
|
|
|
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 |
|
|
brixxx
Lõuapoolik
liitunud: 04.01.2012
|
01.12.2013 15:25:23
|
|
|
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 |
|
|
|
lisa lemmikuks |
|
|
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.
|