L
lspagl
Gast
Code:
package gui;
import javax.swing.BorderFactory;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import java.awt.Frame;
import javax.swing.JDialog;
import java.awt.GridLayout;
import javax.swing.JSplitPane;
import java.awt.GridBagLayout;
import java.awt.Dimension;
import javax.swing.JComboBox;
import javax.swing.JCheckBox;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Vector;
import klassen.Tools;
import klassen.Datensatz;
public class DsBearbeiten extends JDialog implements ItemListener {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JSplitPane jSplitPane = null;
private JPanel panelPunkte = null;
private JPanel panelWerte = null;
private JComboBox comboStdPktAlt = null;
private JComboBox comboZielPktAlt = null;
private JComboBox comboStdPktNeu = null;
private JComboBox comboZielPktNeu = null;
private JCheckBox cBoxLage1 = null;
private JCheckBox cBoxLage2 = null;
private JCheckBox cBoxAlle = null;
private JButton butSpeichern = null;
private JButton butLoeschen = null;
private JButton butSchliessen = null;
private Degas owner = null;
private DsBearbeiten myself;
private boolean wait = false;
private DefaultComboBoxModel stdPktAlt = new DefaultComboBoxModel();
private DefaultComboBoxModel stdPktNeu = new DefaultComboBoxModel();
private DefaultComboBoxModel zielPktAlt = new DefaultComboBoxModel();
private DefaultComboBoxModel zielPktNeu = new DefaultComboBoxModel();
// private Vector<Object> stdPkt = new Vector<Object>();
// private Vector<Object> zielPkt = new Vector<Object>();
/**
* @param owner
*/
public DsBearbeiten(Degas owner) {
super(owner);
this.owner = owner;
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.myself = this;
this.setSize(790, 272);
this.setLocation(Tools.bildMitte(this));
this.setResizable(false);
this.setTitle("Datensatz bearbeiten");
this.setModal(true);
this.setContentPane(getJContentPane());
// this.buttonGrösse();
this.fillWerte();
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJSplitPane(), BorderLayout.CENTER);
}
return jContentPane;
}
/**
* This method initializes jSplitPane
*
* @return javax.swing.JSplitPane
*/
private JSplitPane getJSplitPane() {
if (jSplitPane == null) {
jSplitPane = new JSplitPane();
jSplitPane.setDividerSize(3);
jSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
jSplitPane.setTopComponent(getPanelPunkte());
jSplitPane.setBottomComponent(getPanelWerte());
jSplitPane.setDividerLocation((this.getHeight()/8)*3);
}
return jSplitPane;
}
/**
* This method initializes panelPunkte
*
* @return javax.swing.JPanel
*/
private JPanel getPanelPunkte() {
if (panelPunkte == null) {
panelPunkte = new JPanel();
panelPunkte.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, this.getWidth()/2));
panelPunkte.setLayout(new GridLayout(3, 3, 10, 10));
panelPunkte.add(new JLabel());
panelPunkte.add(new JLabel("Standpunkt", SwingConstants.CENTER));
panelPunkte.add(new JLabel("Zielpunkt", SwingConstants.CENTER));
panelPunkte.add(new JLabel("aktuelle", SwingConstants.RIGHT));
panelPunkte.add(getComboStdPktAlt(), null);
panelPunkte.add(getComboZielPktAlt(), null);
panelPunkte.add(new JLabel("neue", SwingConstants.RIGHT));
panelPunkte.add(getComboStdPktNeu(), null);
panelPunkte.add(getComboZielPktNeu(), null);
}
return panelPunkte;
}
/**
* This method initializes panelWert
*
* @return javax.swing.JPanel
*/
private JPanel getPanelWerte() {
if (panelWerte == null) {
String[] text = {"Horizontalwinkel", "Vertikalwinkel", "Hz-Strecke", "Höhenunterschied", "Schrägstrecke", "Instrumentenhöhe\n[m]", "Reflektorhöhe\n[m]"};
GridBagConstraints constraint = new GridBagConstraints();
constraint.insets = new Insets(5, 10, 5, 10);
panelWerte = new JPanel();
panelWerte.setLayout(new GridBagLayout());
constraint.gridy = 0;
for (int i = 0; i < text.length; i++) {
constraint.gridx = i+1;
panelWerte.add(new JLabel(text[i], SwingConstants.CENTER), constraint);
}
constraint.gridy = 1;
constraint.gridx = 0;
panelWerte.add(getCBoxLage1(), constraint);
for (int i = 1; i <= text.length; i++) {
constraint.gridx = i;
if (i < text.length - 1)
panelWerte.add(new JLabel(), constraint);
else
panelWerte.add(new JFormattedTextField(Tools.df3), constraint);
}
constraint.gridy = 2;
constraint.gridx = 0;
panelWerte.add(getCBoxLage2(), constraint);
for (int i = 1; i <= text.length; i++) {
constraint.gridx = i;
if (i < text.length - 1)
panelWerte.add(new JLabel(), constraint);
else
panelWerte.add(new JFormattedTextField(Tools.df3), constraint);
}
constraint.gridy = 3;
constraint.gridx = 0;
constraint.gridwidth = 2;
constraint.anchor = GridBagConstraints.WEST;
panelWerte.add(getCBoxAlle(), constraint);
constraint.gridwidth = 1;
constraint.anchor = GridBagConstraints.CENTER;
constraint.gridx = 5;
constraint.fill = GridBagConstraints.NONE;
panelWerte.add(getButSpeichern(), constraint);
constraint.gridx = 6;
panelWerte.add(getButLoeschen(), constraint);
constraint.gridx = 7;
panelWerte.add(getButSchliessen(), constraint);
}
return panelWerte;
}
/**
* This method initializes comboStdPktalt
*
* @return javax.swing.JComboBox
*/
private JComboBox getComboStdPktAlt() {
if (comboStdPktAlt == null) {
comboStdPktAlt = new JComboBox(this.stdPktAlt);
comboStdPktAlt.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("comboBoxStdPktAlt");
myself.fillComboBox(myself.zielPktAlt);
myself.fillComboBox(myself.stdPktNeu);
}
});
this.fillComboBox(this.stdPktAlt);
}
return comboStdPktAlt;
}
/**
* This method initializes comboZielPktAlt
*
* @return javax.swing.JComboBox
*/
private JComboBox getComboZielPktAlt() {
if (comboZielPktAlt == null) {
comboZielPktAlt = new JComboBox(this.zielPktAlt);
comboZielPktAlt.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("comboBoxZielPktAlt");
if (!myself.wait)
myself.fillWerte();
myself.fillComboBox(myself.zielPktNeu);
}
});
}
return comboZielPktAlt;
}
/**
* This method initializes comboStdPktNeu
*
* @return javax.swing.JComboBox
*/
private JComboBox getComboStdPktNeu() {
if (comboStdPktNeu == null) {
comboStdPktNeu = new JComboBox(this.stdPktNeu);
comboStdPktNeu.setEditable(true);
comboStdPktNeu.setSelectedIndex(-1);
comboStdPktNeu.addItemListener(this);
this.fillComboBox(this.stdPktNeu);
}
return comboStdPktNeu;
}
/**
* This method initializes comboZielPktNeu
*
* @return javax.swing.JComboBox
*/
private JComboBox getComboZielPktNeu() {
if (comboZielPktNeu == null) {
comboZielPktNeu = new JComboBox(this.zielPktNeu);
comboZielPktNeu.setEditable(true);
comboZielPktNeu.setSelectedIndex(-1);
comboZielPktNeu.addItemListener(this);
this.fillComboBox(this.zielPktNeu);
}
return comboZielPktNeu;
}
/**
* This method initializes cBoxLage1
*
* @return javax.swing.JCheckBox
*/
private JCheckBox getCBoxLage1() {
if (cBoxLage1 == null) {
cBoxLage1 = new JCheckBox();
cBoxLage1.addItemListener(this);
}
return cBoxLage1;
}
/**
* This method initializes cBoxLage2
*
* @return javax.swing.JCheckBox
*/
private JCheckBox getCBoxLage2() {
if (cBoxLage2 == null) {
cBoxLage2 = new JCheckBox();
cBoxLage2.addItemListener(this);
}
return cBoxLage2;
}
/**
* This method initializes cBoxAlle
*
* @return javax.swing.JCheckBox
*/
private JCheckBox getCBoxAlle() {
if (cBoxAlle == null) {
cBoxAlle = new JCheckBox();
cBoxAlle.setText("Alle markieren");
cBoxAlle.addItemListener(this);
}
return cBoxAlle;
}
/**
* This method initializes butSpeichern
*
* @return javax.swing.JButton
*/
private JButton getButSpeichern() {
if (butSpeichern == null) {
butSpeichern = new JButton();
butSpeichern.setText("Speichern");
}
return butSpeichern;
}
/**
* This method initializes butLoeschen
*
* @return javax.swing.JButton
*/
private JButton getButLoeschen() {
if (butLoeschen == null) {
butLoeschen = new JButton();
butLoeschen.setText("Löschen");
butLoeschen.setEnabled(false);
butLoeschen.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (myself.getCBoxLage1().isSelected()) {
Degas.getProjekt().getMessDaten().delete(myself.getComboStdPktAlt().getSelectedItem().toString(), myself.getComboZielPktAlt().getSelectedItem().toString(), true);
myself.getCBoxLage1().setSelected(false);
}
if (myself.getCBoxLage2().isSelected()) {
Degas.getProjekt().getMessDaten().delete(myself.getComboStdPktAlt().getSelectedItem().toString(), myself.getComboZielPktAlt().getSelectedItem().toString(), false);
myself.getCBoxLage2().setSelected(false);
}
myself.getCBoxAlle().setSelected(false);
myself.getButLoeschen().setEnabled(false);
myself.fillComboBox(myself.stdPktAlt);
}
});
}
return butLoeschen;
}
/**
* This method initializes butSchliessen
*
* @return javax.swing.JButton
*/
private JButton getButSchliessen() {
if (butSchliessen == null) {
butSchliessen = new JButton();
butSchliessen.setText("Schließen");
}
return butSchliessen;
}
private void buttonGrösse() {
int height = 0;
int width = 0;
for (Component c: this.getPanelWerte().getComponents()) {
if (c instanceof JButton) {
System.out.println(c.getSize().toString());
if (height < c.getHeight())
height = c.getHeight();
if (width < c.getWidth())
width = c.getWidth();
}
}
for (int i = 0; i < this.getPanelWerte().getComponentCount(); i++) {
Component c = this.getPanelWerte().getComponent(i);
if (c instanceof JButton) {
c.setSize(width, height);
c.validate();
}
}
this.getPanelWerte().validate();
}
/**
* Methode zum füllen der entsprechenden Comboboxmodelle nach gewissen Kriterien
* @param DefaultCobmoBoxModel Modell der zu füllenden ComboBox
*/
private void fillComboBox(DefaultComboBoxModel model) {
if (model.getSize() > 0)
model.removeAllElements();
if (model.equals(this.stdPktAlt)) {
for ( int i = 0, anz = Degas.getProjekt().getMessDaten().getSize(); i < anz; i++) {
Object obj = Degas.getProjekt().getMessDaten().getDatensatz(i).get(0);
if (this.stdPktAlt.getIndexOf(obj) == -1)
this.stdPktAlt.addElement(obj);
}
this.fillComboBox(zielPktAlt);
}
if (model.equals(this.zielPktAlt)) {
for ( int i = 0, anz = Degas.getProjekt().getMessDaten().getSize(); i < anz; i++) {
if (Degas.getProjekt().getMessDaten().getDatensatz(i).get(0).equals(this.stdPktAlt.getSelectedItem())) {
Object obj = Degas.getProjekt().getMessDaten().getDatensatz(i).get(1);
if (model.getIndexOf(obj) == -1)
model.addElement(obj);
}
}
}
if (model.equals(this.stdPktNeu)) {
for (int i = 0, anz = this.stdPktAlt.getSize(); i < anz; i++)
if (!this.stdPktAlt.getElementAt(i).equals(this.stdPktAlt.getSelectedItem()))
model.addElement(this.stdPktAlt.getElementAt(i));
model.setSelectedItem(null);
}
if (model.equals(this.zielPktNeu)) {
for (int i = 0, anz = this.zielPktAlt.getSize(); i < anz; i++)
if (!this.zielPktAlt.getElementAt(i).equals(this.zielPktAlt.getSelectedItem()))
model.addElement(this.zielPktAlt.getElementAt(i));
model.setSelectedItem(null);
}
}
private void fillWerte() {
Vector ds = Degas.getProjekt().getMessDaten().getDatenSatz(this.stdPktAlt.getSelectedItem().toString(), this.zielPktAlt.getSelectedItem().toString(), true);
if (!ds.isEmpty()) {
boolean[] indikator = (boolean[])ds.lastElement();
for(int i = 8, j = 0, anz = this.getPanelWerte().getComponentCount(); i < anz; i++) {
Component comp = this.getPanelWerte().getComponent(i);
if ((comp instanceof JLabel) || (comp instanceof JTextField)) {
if ((j < 4) && (indikator[j])) {
JLabel l = (JLabel)comp;
if (j < 2)
l.setText(Tools.df4.format(ds.get(j+2))+ " [gon]");
else
l.setText(Tools.df3.format(ds.get(j+2))+ " [m]");
}
if ((j >= 4) && (j < 7)&& (indikator[1])) {
if (comp instanceof JLabel) {
JLabel l = (JLabel)comp;
l.setText(Tools.df3.format(ds.get(j+2))+ " [m]");
}
if (comp instanceof JTextField) {
JTextField t = (JTextField)comp;
t.setText(Tools.df3.format(ds.get(j+2)));
}
}
if (j == 7) {
j = 0;
ds = Degas.getProjekt().getMessDaten().getDatenSatz(this.stdPktAlt.getSelectedItem().toString(), this.zielPktAlt.getSelectedItem().toString(), false);
if (!ds.isEmpty())
indikator = (boolean[])ds.lastElement();
else {
this.cBoxLage2.setVisible(false);
break;
}
} else
j++;
}
}
this.getJSplitPane().validate();
}
}
public void itemStateChanged(ItemEvent e) {
if ((e.getSource().equals(this.getCBoxLage1())) || (e.getSource().equals(this.getCBoxLage2()))) {
if (this.getCBoxLage1().isSelected() || this.getCBoxLage2().isSelected())
this.getButLoeschen().setEnabled(true);
else
this.getButLoeschen().setEnabled(false);
}
if (e.getSource().equals(this.getCBoxAlle())) {
if (this.getCBoxLage1().isSelected())
this.getCBoxLage1().setSelected(false);
else
this.getCBoxLage1().setSelected(true);
if (this.getCBoxLage2().isSelected())
this.getCBoxLage2().setSelected(false);
else
this.getCBoxLage2().setSelected(true);
}
}
} // @jve:decl-index=0:visual-constraint="10,10"
Ich hab jetzt mal den ganzen Quelltext hier gepostet, weil ich das ding gerade nicht mehr sehen kann.
Also das Problem besteht einfach darin, dass wenn ich die Combobox comboStdPktAlt anklicke fühlt er die Modelle this.stdPktNeu und this.ZielPktAlt anhand des neu gewählten alten Standpunktes. Nur dann geht es los. Anscheinden ist noch this.zielPktAlt noch nicht voll, da führt er schon this.fillWerte aus, weil bei der Erzeugung von ds kommt immer eine NullPointerException. er kann also auf irgendwas da nicht zugreifen. Und ich weiss nicht mehr weiter. Normaler weise wird doch alles Schritt für Schritt abgearbeitet und wenn die Modele voll sind, kann ich da doch einen Wert auslesen, nur macht er alles gleichezeitig wie mir scheint, ist doch aber nur ein Tread.
Also wo könnte der Fehler liegen? Ich komm da echt nicht mehr mit.
Das der btnLoeschen sowieso nur Fehler auswirft ist das nächste. Sobald ich auf ein Model zugreife es ändere und dann die neuen Texte ausgeben will, dann dreht er durch.
Danke für eure Hilfe, ich bin mit den Nerven fertig.