Toon posts:

[Java] Checkbox verdwijnt uit tabel bij mouseout

Pagina: 1
Acties:

Verwijderd

Topicstarter
Heb de volgende java code waarmee ik een tabel tevoorschijn toon met daarin een aantal checkboxes

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public void createTableIRCab()
  {
      int x = 20;
      int y = 130;
      int rowHeight = 20;
        int tableWidth = 400;
                 
        int channel = 1; String status = "On"; int ira = 2; int irb = 45; int irc = 29; String log = "Logging";
        String[] IRCabColNames = {"Channel","Status","IR-A", "IR-B", "IR-C", "Log"};
        Object[][] IRCabData = {    {"1", status, data[1], data[2], irc, new Boolean(false)},
                                                     {"2", status, ira, irb, irc, new Boolean(false)},
                                                       {"3", status, ira, irb, irc, new Boolean(false)},
                                                       {"4", status, ira, irb, irc, new Boolean(false)},
                                                      {"5", status, ira, irb, irc, new Boolean(false)},     
                                            };
        IRCabTable = new JTable(IRCabData, IRCabColNames)
        {
            public boolean isCellEditable(int row, int col)
            {
                if (col < 4)
                    return false;
        else
            return true;         
      }          
    
      public Class getColumnClass(int c)
      {
          return getValueAt(0, c).getClass();
      }
        };
        
        int numRows = IRCabTable.getRowCount();
        int tableHeight = (numRows * rowHeight) + 20;        
        IRCabTable.setAutoResizeMode(4);
        IRCabTable.setGridColor(Color.black);
        IRCabTable.setRowHeight(rowHeight);        
        IRCabTable.setShowHorizontalLines(false);
        IRCabTable.getTableHeader().setReorderingAllowed(true);
                IRCabTable.getTableHeader().setResizingAllowed(true);
                IRCabTable.setSelectionBackground(new Color(200, 228, 255));
                IRCabTable.setSelectionForeground(Color.blue);

                IRCabTable.setPreferredScrollableViewportSize(new Dimension(tableWidth, tableHeight));
        IRCabTable.setBounds(x, y, tableWidth, tableHeight);
        ((DefaultTableCellRenderer)IRCabTable.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(SwingConstants.CENTER);
        add(IRCabTable);
        
        JScrollPane IRCabScrollPane = new JScrollPane(IRCabTable);
        IRCabScrollPane.setBounds(x, y, tableWidth, tableHeight);
        add(IRCabScrollPane);
        
        labelIRCab = new JLabel(".:: Infrared Intensity - Cabine ::.");
        labelIRCab.setBounds(x+10, y-20, 200, 20);
        labelIRCab.setForeground(new Color(0, 0, 128));                
        add(labelIRCab);    
  }



Alleen nu is het zo dat de checkboxes wel te zien zijn, maar als je ze aanklikt verdwijnt het vinkje vrijwel meteen weer en sprint de checkbox terug in zijn oorspronkelijke staat..

wat doe ik fout en wat kan ik eraan doen??

  • Standeman
  • Registratie: November 2000
  • Laatst online: 17:04

Standeman

Prutser 1e klasse

Heb je nog events op de table staan?

The ships hung in the sky in much the same way that bricks don’t.


Verwijderd

Topicstarter
nope.. (nog) helemaal niks..

[ Voor 17% gewijzigd door Verwijderd op 20-04-2005 15:59 ]


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Heeft het misschien iets te maken met die isCellEditable functie? Het lijkt erop dat tot en met IR-B de cellen niet editable zijn. Dit baseer ik op de waarde van IRCabColNames en het feit dat als col < 4 (dit is 0-based geloof ik) false terug geeft in die functie.

offtopic:
tip: Normaal gesproken beginnen variabelen met een kleine letter in Java, daar hou jij je niet echt aan. :)

Verwijderd

Topicstarter
dat klopt.. want die hoeven ook niet editable te zijn.. eingelijk alleen maar degene met de checkbox, maar dat moet ik nog veranderen..

maar dat zou er op zcih toch niks mee te maken moeten hebben, want als hij WEL editable is zou hij dus gewoon moeten werken..

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-05 18:51

Creepy

Tactical Espionage Splatterer

Je bent al aan het debuggen geslagen? Je hebt misschien zelf al wat zaken geprobeerd? (let op: antwoord hierop moet ja zijn voordat je hier een topic opent :P ). Wat lukte daar niet mee?

Zie ook P&W FAQ - De "quickstart" en P&W FAQ - Leer **** debuggen!!.

Je topic komt nu over op mij als "Dit is mijn code, zoek de fout.". Iets wat hier niet de bedoeling is ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
In dat geval denk ik dat het nu redelijk basic debugwerk wordt.
Plaats eens wat System.out.printlns in je code, bijvoorbeeld om te kijken of die create functie misschien vaker wordt aangeroepen dan dat jij verwacht.

Of nog beter, gebruik een debugger en step eens door je programma heen om te zien wat er nu precies gebeurt als er op zo'n checkbox wordt geklikt.

edit:
spuit 11 :)

[ Voor 5% gewijzigd door bigbeng op 20-04-2005 16:06 ]


Verwijderd

Topicstarter
zo.. weer wat geleerd :) hij stond namelijk in mijn paintComponent() methode en die werd telkens gerefreshed.. dus de 'oude' tabel werd weer overschreven met eentje waarbij de checkbox was uitgevinkt..

maar hoe komt het dat die paintComponent() telkens weer wodt aangeroepen?? ik gebruik nergens een repaint() oid..

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Jij niet misschien, maar zodra jij je muis over een window heenbeweegt dan wil je toch niet dat er een trail van mousepointers achterblijft?
Repaint wordt dus op verschillende momenten aangeroepen door de diverse componenten zelf. Minimaliseren en dan weer Restoren is er ook een voorbeeld van, of als er een ander window voor gehangen heeft.
Creatie van je componenten moet je altijd in een zelfgedefinieerd functie doen die maar 1x wordt aangeroepen. Je kan daar de constructor voor gebruiken, of als je veel componenten creert, kun je een aparte methode daarvoor definieren die je vanuit je constructor aanroep.
Pagina: 1