1Danke
ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
217
217
EMPFEHLEN
-
31.03.10 00:47 #1
- 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
THEJSDas Danke: kostet nicht viel und sieht gut aus. ;)
--> Bitte das Thema als erledigt markieren, wenn es das ist!!
-
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
-
31.03.10 09:58 #3
- 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!!
-
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!Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.
(Johann Wolfgang von Goethe)
----------------------------------------------------------------------
FLEXibler Java Entwickler
-
31.03.10 20:16 #5
- 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
THEJSDas Danke: kostet nicht viel und sieht gut aus. ;)
--> Bitte das Thema als erledigt markieren, wenn es das ist!!





Zitieren
Login





