tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Artorius
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
217
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    THEJS THEJS ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Ort
    Sandl (Oberösterreich)
    Beiträge
    93
    Hallo Leute!

    Hab mal was ganz was anderes:

    Ich habe eine Client-Applikation (RMI) in der 2 Tabellen und ein 'header' mit 2 Labels und einem Spinner ist.
    Das Problem:
    Ich kann den Spinner nicht anwählen bzw. den Wert darin nicht verändern.
    Hab schon einige Sachen ausprobiert...
    Wenn ich den Spinner nicht in den Header gebe, funktioniert er. Weiß jemand hilfe?

    Code 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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    
    public class WS_Liefertermine extends BusinessPanel implements DeliveryTableInterface
    {
        private static final long oneDayInMillis = (60*60*24*1000);
        
        private ReadOnlyTableModel dtm = new ReadOnlyTableModel();
        private JTable table = new JTable(dtm);
        private JTable ordertable = new JTable(new ReadOnlyTableModel());
     
        private JLabel label1;
        private JNumberSpinner spinner;
        
        private JPanel northCenterPanel;
        private JPanel northEastPanel;
        private JPanel centerPanel = new JPanel();
        
        private JPanel northPanel = new JPanel();
        private JLabel label = new JLabel("Kalenderwoche: ");
        
        private ArrayList<UpdateActionBuffer> updatedDates = new ArrayList<UpdateActionBuffer>();
        
        protected static Calendar myCalendar = Calendar.getInstance();
        protected static boolean readOnly = false;
        
        private Object[] columnIdentifier = new Object[] {
                "manualproductionid",
                "ArtikelNr",
                "Beschreibung",
                "Montag (XX.XX.XXXX)",
                "Dienstag (XX.XX.XXXX)",
                "Mittwoch (XX.XX.XXXX)",
                "Donnerstag (XX.XX.XXXX)",
                "Freitag (XX.XX.XXXX)",
                "Gesamt (KWX)",
                "isreadonly"
        };
        
        private Date dateOnMonday;
        
        public WS_Liefertermine(String[] args)
        {
            initialize();
        }
        
        private void initialize()
        {       
            spinner = new JNumberSpinner(myCalendar.get(Calendar.WEEK_OF_YEAR), myCalendar.get(Calendar.WEEK_OF_YEAR)-10, myCalendar.get(Calendar.WEEK_OF_YEAR)+10, 1);
            label1 = new JLabel();
            northPanel = new JPanel();
            northCenterPanel = new JPanel();
            northEastPanel = new JPanel();
            
            this.setLayout(new BorderLayout());
            
            this.add(northPanel, BorderLayout.PAGE_START);
            this.add(centerPanel, BorderLayout.CENTER);
            
            spinner.setPreferredSize(new Dimension(50, 20));
            spinner.addChangeListener(new ChangeListener()
            {
                public void stateChanged(ChangeEvent e)
                {
                    //...
                }
            });
            
            myCalendar.setFirstDayOfWeek(Calendar.MONDAY);
            myCalendar.setTimeInMillis(System.currentTimeMillis());
     
            northPanel.setPreferredSize(new Dimension(200, 60));
            northCenterPanel.setPreferredSize(new Dimension(200, 60));
            
            northCenterPanel.add(label);
            northCenterPanel.add(spinner);
            
            northPanel.setLayout(new BorderLayout());
            northPanel.add(northCenterPanel, BorderLayout.CENTER);
            northPanel.add(northEastPanel, BorderLayout.EAST);
            
            northEastPanel.setPreferredSize(new Dimension(200, 60));
            northEastPanel.setLayout(new BorderLayout());
            label1.setFont(new Font("Arial", Font.PLAIN, 54));
            northEastPanel.add(label1, BorderLayout.CENTER);
            
            centerPanel.setLayout(new BorderLayout());
            
            JPanel centernorthpanel = new JPanel();
            
            centernorthpanel.setLayout(new BorderLayout());
            centernorthpanel.add(table.getTableHeader(), BorderLayout.PAGE_START);
            centernorthpanel.add(new JScrollPane(table, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER);
            centernorthpanel.setPreferredSize(new Dimension(12, 120));
            JPanel centercenterpanel = new JPanel();
            centercenterpanel.setLayout(new BorderLayout());
            centercenterpanel.add(ordertable.getTableHeader(), BorderLayout.PAGE_START);
            centercenterpanel.add(new JScrollPane(ordertable), BorderLayout.CENTER);
            
            centerPanel.add(centernorthpanel, BorderLayout.NORTH);
            centerPanel.add(centercenterpanel, BorderLayout.CENTER);
            
            table.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION);
     
            table.getTableHeader().setReorderingAllowed(false);
            table.setAutoCreateRowSorter(true);
            
            ordertable.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION);
            ordertable.getTableHeader().setReorderingAllowed(false);
            ordertable.setAutoCreateRowSorter(true);
            
            table.getColumnModel().addColumnModelListener(new TableColumnModelAdapter()
            {
                @Override
                public void columnSelectionChanged(ListSelectionEvent e)
                {
                    if(table.getSelectedColumn() > 8)
                    {
                        table.getColumnModel().getSelectionModel().setSelectionInterval(table.getSelectedColumn()-1, table.getSelectedColumn()-1);
                    } else if(table.getSelectedColumn() < 1)
                    {
                        table.getColumnModel().getSelectionModel().setSelectionInterval(table.getSelectedColumn()+1, table.getSelectedColumn()+1);
                    }
                }
            });
            
            ordertable.getColumnModel().addColumnModelListener(new TableColumnModelAdapter()
            {
                @Override
                public void columnSelectionChanged(ListSelectionEvent e)
                {
                    if(ordertable.getSelectedColumn() > 8)
                    {
                        ordertable.getColumnModel().getSelectionModel().setSelectionInterval(ordertable.getSelectedColumn()-1, ordertable.getSelectedColumn()-1);
                    } else if(ordertable.getSelectedColumn() < 1)
                    {
                        ordertable.getColumnModel().getSelectionModel().setSelectionInterval(ordertable.getSelectedColumn()+1, ordertable.getSelectedColumn()+1);
                    }
                }
            });
            
            spinner.getChangeListeners()[0].stateChanged(new ChangeEvent(spinner));
            
            ordertable.getRowSorter().toggleSortOrder(2);
            table.getRowSorter().toggleSortOrder(2);
            
            try
            {
                DeliveryDateService dds = WorkshopClient.getDeliveryDateService();
                DeliveryDateUpdateActionImpl action = new DeliveryDateUpdateActionImpl()
                {
                    private static final long serialVersionUID = 1L;
     
                    @Override
                    public void updateAction(int productid, Date affectedDate,
                            boolean wasManualChange, int newValue) throws RemoteException
                    {
                        updatedDates.add(new UpdateActionBuffer(productid, affectedDate, wasManualChange, newValue));
                        localUpdateAction(productid, affectedDate, wasManualChange, newValue);
                    }
                };
                dds.addUpdateListener(WorkshopClient.getClientInformation(), action);
            } catch (RemoteException e1)
            {
                // TODO: Logging
                e1.printStackTrace();
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            
            spinner.requestFocus();
            
        }
     
        protected void localUpdateAction(int productid, Date affectedDate,
                boolean wasManualChange, int newValue)
        {
            try
            {
                Calendar c = Calendar.getInstance();
                c.setTimeInMillis(affectedDate.getTime());
                if(c.get(Calendar.WEEK_OF_YEAR) == myCalendar.get(Calendar.WEEK_OF_YEAR))
                {
                    boolean found = false;
                    if(wasManualChange)
                    {
                        for(int i=0;i<table.getRowCount();i++)
                        {
                            if(table.getValueAt(i, 0).toString().equals(String.valueOf(productid)))
                            {
                                table.setValueAt("1_" + newValue, i, c.get(Calendar.DAY_OF_WEEK)+1);
                                table.setValueAt("1_" + getSum(table, i), i, 8);
                                found = true;
                            }
                        }
                    } else
                    {
                        for(int i=0;i<ordertable.getRowCount();i++)
                        {
                            if(ordertable.getValueAt(i, 0).toString().equals(String.valueOf(productid)))
                            {
                                ordertable.setValueAt("1_" + newValue, i, c.get(Calendar.DAY_OF_WEEK)+1);
                                ordertable.setValueAt("1_" + getSum(ordertable, i), i, 8);
                                found = true;
                            }
                        }
                    }
                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
     
        private void setColumnSizes(JTable table)
        {
            
            Color c_yellow = new Color(255,255,153);
            Color c_lila = new Color(204,204,255);
     
            table.getColumnModel().getColumn(0).setMinWidth(0);
            table.getColumnModel().getColumn(0).setPreferredWidth(0);
            table.getColumnModel().getColumn(0).setMaxWidth(0);
            table.getColumnModel().getColumn(1).setMinWidth(74);
            table.getColumnModel().getColumn(1).setPreferredWidth(74);
            table.getColumnModel().getColumn(1).setMaxWidth(74);
            table.getColumnModel().getColumn(1).setCellEditor(new ArticleSelectionEditor());
            table.getColumnModel().getColumn(3).setMinWidth(115);
            table.getColumnModel().getColumn(3).setPreferredWidth(115);
            table.getColumnModel().getColumn(3).setMaxWidth(115);
            table.getColumnModel().getColumn(3).setCellRenderer(new DefaultColorRenderer(c_yellow));
            table.getColumnModel().getColumn(4).setMinWidth(120);
            table.getColumnModel().getColumn(4).setPreferredWidth(120);
            table.getColumnModel().getColumn(4).setMaxWidth(120);
            table.getColumnModel().getColumn(4).setCellRenderer(new DefaultColorRenderer(c_lila));
            table.getColumnModel().getColumn(5).setMinWidth(125);
            table.getColumnModel().getColumn(5).setPreferredWidth(125);
            table.getColumnModel().getColumn(5).setMaxWidth(125);
            table.getColumnModel().getColumn(5).setCellRenderer(new DefaultColorRenderer(c_yellow));
            table.getColumnModel().getColumn(6).setMinWidth(135);
            table.getColumnModel().getColumn(6).setPreferredWidth(135);
            table.getColumnModel().getColumn(6).setMaxWidth(135);
            table.getColumnModel().getColumn(6).setCellRenderer(new DefaultColorRenderer(c_lila));
            table.getColumnModel().getColumn(7).setMinWidth(115);
            table.getColumnModel().getColumn(7).setPreferredWidth(115);
            table.getColumnModel().getColumn(7).setMaxWidth(115);
            table.getColumnModel().getColumn(7).setCellRenderer(new DefaultColorRenderer(c_yellow));
            table.getColumnModel().getColumn(8).setMinWidth(90);
            table.getColumnModel().getColumn(8).setPreferredWidth(90);
            table.getColumnModel().getColumn(8).setMaxWidth(90);
            table.getColumnModel().getColumn(8).setCellRenderer(new DefaultColorRenderer(c_lila));
            table.getColumnModel().getColumn(9).setMinWidth(0);
            table.getColumnModel().getColumn(9).setPreferredWidth(0);
            table.getColumnModel().getColumn(9).setMaxWidth(0);
        }
     
        @Override
        public void refreshTableData()
        {
            dtm.setRowCount(0);
            ((DefaultTableModel)ordertable.getModel()).setRowCount(0);
            try
            {
                //...
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }
     
        @Override
        public int getCurrentCalendarWeek()
        {
            return myCalendar.get(Calendar.WEEK_OF_YEAR);
        }
     
        @Override
        public boolean isReadOnly()
        {
            return true;
        }
     
        @Override
        public Date getDateOnMonday()
        {
            return dateOnMonday;
        }
     
        @Override
        public void openSettings(){}
     
    }

    *Edit:*
    JNumberSpinner ist meine Eigenkreation, da ich dachte es liegt am Spinner, funktioniert aber genauso wie der Spinner.

    greez
    THEJS
     
    Das Danke: kostet nicht viel und sieht gut aus. ;)

    --> Bitte das Thema als erledigt markieren, wenn es das ist!!

  2. #2
    Avatar von Artorius
    Artorius Artorius ist offline Mitglied Plutonium
    Registriert seit
    Feb 2010
    Beiträge
    222
    Hi,
    Ich bezweifle doch sehr, dass auch das hier wieder ein Bug sein soll

    Poste doch bitte mal ein lauffähiges Beispiel. Damit meine ich auch, dass du den Code mal so vereinfachst, dass du alles unnötige, was nichts mit dem eigentlichen Problem zu tun hat, rausschmeist. Weil wenn ich deinen Code nehme und ihn vereinfache, so dass er läuft, kann ich kein Problem erkennen...
    Eventuell taucht ja das Problem auch nicht mehr auf, wenn du Teile davon entfernst... Dann hättest du schonmal einen Anhaltspunkt...

    Grüße!
     
    Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.
    (Johann Wolfgang von Goethe)
    ----------------------------------------------------------------------
    FLEXibler Java Entwickler

  3. #3
    THEJS THEJS ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Ort
    Sandl (Oberösterreich)
    Beiträge
    93
    OK, grundsätzlich hab ich das Problem(?) gefunden.

    Es liegt/lag daran, dass meine Klasse vom BusinessPanel ableitete. Wenn ich das ganze einfach vom JPanel ableite funktionierts.

    Eigentlich könnt ich es jetzt so lassen, würd aber trotzdem gerne wissen was hier warum passiert!?

    greez

    Edit:

    Vielleichts machts das ganze dann einfacher:
    Code 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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    
    public abstract class BusinessPanel extends StammdatenPanel
    {
        
        public DefaultTableModel dtm = new ReadOnlyTableModel();
        public MyTable table = new MyTable(dtm);
        public JScrollPane scrollP = new JScrollPane(table);
     
        public BusinessPanel()
        {
            this.setLayout(new BorderLayout());
            this.add(table.getTableHeader(), BorderLayout.NORTH);
            this.add(scrollP, BorderLayout.CENTER);
     
        }
        
        @Override
        public void load()
        {
            refreshTableData();
        }
        
        @Override
        public void unload()
        {
            dtm.setRowCount(0);
        }
     
        @Override
        public void removeSelectedLine() {}
        
        @Override
        public void addNewLine() {}
        
        @Override
        public int getSelectedPrimary()
        {
            if(table.getRowCount() > 0 && table.getSelectedRow() >= 0)
                return Integer.valueOf(dtm.getValueAt(table.convertRowIndexToModel(table.getSelectedRow()), 0).toString().substring(1));
            else return -1;
        }
     
    }
     
    public abstract class StammdatenPanel extends ButtonBarComponent
    {
     
        public StammdatenPanel()
        {
        }
     
        public abstract void openSettings();
     
        public abstract int getSelectedPrimary();
     
        public abstract void refreshTableData();
     
        public abstract void addNewLine();
     
        public abstract void removeSelectedLine();
        
        public void printpreview()
        {
            JOptionPane.showMessageDialog(null, "Zu diesem Panel sind keine Druckformate definiert.", "Keine Druckformate", JOptionPane.INFORMATION_MESSAGE);
        }
        
        public void print()
        {
            JOptionPane.showMessageDialog(null, "Zu diesem Panel sind keine Druckformate definiert.", "Keine Druckformate", JOptionPane.INFORMATION_MESSAGE);
        }
     
    }

    ButtonBarComponent leitet dann von einem Interface ab, in dem die Methoden load und unload drinnen sind.
    Geändert von THEJS (31.03.10 um 11:21 Uhr)
     
    Das Danke: kostet nicht viel und sieht gut aus. ;)

    --> Bitte das Thema als erledigt markieren, wenn es das ist!!

  4. #4
    Avatar von Artorius
    Artorius Artorius ist offline Mitglied Plutonium
    Registriert seit
    Feb 2010
    Beiträge
    222
    Ok, das ist immer noch kein Code, den ich oder irgend jemand anders mal bei sich ausführen könnte...

    Aber es ist nun klar, wo dein Problem liegt:
    Im BusinessPanel setzt du ein BorderLayout und fügst dort Komponenten hinzu.
    In der von BusinessPanel abgeleiteten Klasse Liefertermine und fügst wiederum andere Komponenten hinzu und zwar an Stellen, die bereits in BusinessPanel belegt wurden.
    Dann hast du beispielsweise im BusinessPanel ein TableModel dtm als public deklariert, in Liefertermine existiert auch ein TableModel dtm als private allerdings.

    Kurz gesagt, alles was du im BusinessPanel machst, wirfst du im Liefertermine wieder unsauber über den Haufen. Dann ist es kein Wunder, wenn da komische Effekte auftreten.
    Du solltest dir mal ein Konzept machen, was du mit deiner Vererbungshierachie denn erreichen willst. So wie es im Moment ist, bringt das nämlich nur Probleme, sonst nix..

    Grüße!
    THEJS bedankt sich. 
    Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.
    (Johann Wolfgang von Goethe)
    ----------------------------------------------------------------------
    FLEXibler Java Entwickler

  5. #5
    THEJS THEJS ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Ort
    Sandl (Oberösterreich)
    Beiträge
    93
    Oh ja....stimmt....damn

    ich hab vorher vom StammdatenPanel abgeleitet und da warn der Table und das Modell nicht drin.
    Dann hab ich wahrscheinlich mal gewechselt aufs BusinessPanel und dann kawumm.

    Danke dir!
    Immer wieder eine große Hilfe

    greez
    THEJS
     
    Das Danke: kostet nicht viel und sieht gut aus. ;)

    --> Bitte das Thema als erledigt markieren, wenn es das ist!!