Hi,
ich bin neu in der Java Programmierung und habe ein Problem. In der Sufu habe ich leider nichts passendes gefunden.
Ich möchte durch einen Button eine Funktion ausführen in einer anderen Klasse.
Die Funktion copy(). Diese wird auch aufgerufen, doch es wird nicht richtige valueChanged Listener ausgeführt. Der wird in der Methode path() ausgeführt. Ich habe nun ein Problem, wie ich kann ich einen Entscheidungsfall treffen, indem der Anweisungsblock des valueChanged Listeners in der copy() Funktion ausgeführt wird?
Hier ein Code Ausschnitt.
MFG
ich bin neu in der Java Programmierung und habe ein Problem. In der Sufu habe ich leider nichts passendes gefunden.
Ich möchte durch einen Button eine Funktion ausführen in einer anderen Klasse.
Die Funktion copy(). Diese wird auch aufgerufen, doch es wird nicht richtige valueChanged Listener ausgeführt. Der wird in der Methode path() ausgeführt. Ich habe nun ein Problem, wie ich kann ich einen Entscheidungsfall treffen, indem der Anweisungsblock des valueChanged Listeners in der copy() Funktion ausgeführt wird?
Hier ein Code Ausschnitt.
Java:
public class XMLEditor {
private JFrame frame;
private JMenuBar menuBar = new JMenuBar();
private JMenu mnMen = new JMenu("Men\u00FC");
private JMenuItem mntmLaden = new JMenuItem("Laden");
private DefaultMutableTreeNode root = new DefaultMutableTreeNode();
private DefaultTreeModel treeModel = new DefaultTreeModel(root);
private JTree tree1 = new JTree(treeModel);
@SuppressWarnings("unused")
private TreeCellEditor editor;
private JPanel panel1;
private CardLayout cl;
private cardEmpty cEmpty;
private card4 c4;
// Starten der Applikation
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
XMLEditor window = new XMLEditor();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
// Erstellen der Applikation
public XMLEditor() {
initialize();
}
// Initialisieren des Frameinhalts
private void initialize() {
// Frame erstellen
frame = new JFrame();
frame.setSize(706, 645);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.getContentPane().add(panel, BorderLayout.CENTER);
// Frame in zwei Hälften teilen, mittels linkem und rechtem Pane
JSplitPane splitPane = new JSplitPane();
GroupLayout gl_panel = new GroupLayout(panel);
gl_panel.setHorizontalGroup(gl_panel.createParallelGroup(Alignment.TRAILING).addComponent(splitPane,
Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 606, Short.MAX_VALUE));
gl_panel.setVerticalGroup(gl_panel.createParallelGroup(Alignment.LEADING).addComponent(splitPane,
GroupLayout.DEFAULT_SIZE, 389, Short.MAX_VALUE));
JScrollPane scrollPane = new JScrollPane();
splitPane.setLeftComponent(scrollPane);
JScrollPane scrollPane_1 = new JScrollPane();
splitPane.setRightComponent(scrollPane_1);
panel.setLayout(gl_panel);
splitPane.setDividerLocation(0.35);
splitPane.setResizeWeight(0.35);
// Menübar erstellen mit Unterverzeichnissen und Buttons
frame.setJMenuBar(menuBar);
menuBar.add(mnMen);
mnMen.add(mntmLaden);
// ActionListener wird als anonyme Klasse eingebunden
mntmLaden.addActionListener(new ActionListener() {
// Beim Drücken des Menüpunktes wird actionPerformed aufgerufen
public void actionPerformed(ActionEvent e) {
try {
// Dateiauswahldialog wird erzeugt und vorgegebener Pfad
// gesetzt.
JFileChooser fc = new JFileChooser();
fc.setCurrentDirectory(new File("C:/Users/langec/workspace"));
fc.showOpenDialog(frame);
// Holen des Pfads der dem Filechooser übergeben wurde.
// Danach übergabe an die Funktion "load", um den Baum zu
// erstellen.
File path;
path = fc.getSelectedFile();
load(path);
// Des Weiteren wird der Baum an die Scrollbar gehängt.
scrollPane.setViewportView(tree1);
scrollPane_1.setViewportView(panel1);
} catch (Exception e1) {
e1.printStackTrace();
System.out.println("Fehler");
}
}
});
}
public void load(File path) {
// Funktion zum erstellen des Baums.
// Der Baum wird mit jeder Datei die geladen wird neu erstellt.
// Die Datei wird als Paremeter aus vom Objekt mntmLaden übergeben.
//Der TreeListener ermöglicht durch anklicken des Baums die richtigen Karten zu öffnen.
MyTreeModel model = new MyTreeModel();
model.synchronizeXmlWithModel(path, root);
//TreeModel übergeben, um die Möglichkeit der Editierung des Baums zu realisieren.
//Die Veränderungen des Baums werden mit dem Befehl updateUI() ausgegeben.
tree1.setEditable(true);
tree1.updateUI();
//Der Renderer ermöglicht das Bearbeiten der Knoten und Blätter im Baum hinsichtlich des Designs
DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree1.getCellRenderer();
@SuppressWarnings("unused")
TreeCellEditor editor = new LeafCellEditor(tree1, renderer);
tree1.setCellEditor(null);
//Erstellt die Karten(JPanel) der einzelnen Seiten die mit Formularen befüllt werden.
//Nach Erstellung der Karten werden sie dem KartenLayout hinzugefügt.
cl = new CardLayout();
panel1 = new JPanel(cl);
cEmpty = new cardEmpty();
c4 = new card4();
panel1.setLayout(cl);
panel1.add(cEmpty, "0");
panel1.add(c4, "4");
panel1.updateUI();
path();
}
public void copy() {
System.out.println("a1");
tree1.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent tse) {
// Selektiert den aktuellen Knoten oder das aktuelle Blatt
DefaultMutableTreeNode selNode = (DefaultMutableTreeNode) tree1.getLastSelectedPathComponent();
System.out.println("a2");
if (selNode.isLeaf() == true && (selNode.toString() == "ECU-Version")) {
// Erstellt eine Kopie des selektierten Knoten oder Blatts
// auf der gleichen hierarchischen Ebene wie das Original
Object befSelNode;
befSelNode = selNode.getUserObject();
DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) selNode.getParent();
treeModel.insertNodeInto(new DefaultMutableTreeNode(befSelNode), parentNode, 0);
tree1.setCellEditor(null);
} else if (selNode.isLeaf() == false) {
// Ruft einen Fehlerdialog auf, falls ein falscher Knoten
// kopiert wurde
JDialog meinJDialog = new JDialog();
meinJDialog.setTitle("Fehler");
meinJDialog.setSize(320, 60);
meinJDialog.setLocationRelativeTo(frame);
meinJDialog.setModal(true);
meinJDialog.add(new JLabel("Ordner können nicht kopiert werden, nur Textdateien."));
meinJDialog.setVisible(true);
}
}
});
}
public void path() {
tree1.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
// Selektiert den aktuellen Knoten oder das aktuelle Blatt
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree1.getLastSelectedPathComponent();
System.out.println("a");
if (node == null) {
cl.show(cEmpty, "0");
} else if (node.isLeaf() == false && node.toString() == "ECU-Version") {
cl.show(panel1, "4");
}
}
});
}
}
Java:
public class card4 extends JPanel implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
JPanel p;
JLabel lblAddECU, lblECU;
JTextField txtECU;
public JButton btnAddECU;
@SuppressWarnings("deprecation")
public
card4() {
p = new JPanel(new SpringLayout());
lblECU = new JLabel("ECU-Version");
txtECU = new JTextField();
lblAddECU = new JLabel("ECU kopieren: ");
btnAddECU = new JButton("Ok");
btnAddECU.addActionListener(this);
p.add(lblECU);
p.add(txtECU);
p.add(lblAddECU);
p.add(btnAddECU);
txtECU.hide();
// Lay out the panel.
SpringUtilities.makeCompactGrid(p, 2, 2, // rows, cols
6, 6, // initX, initY
6, 6); // xPad, yPad
// Set up the content pane.
p.setOpaque(true); // content panes must be opaque
p.setBounds(-100, 10, 10, 10);
add(p);
}
@Override
public void actionPerformed(ActionEvent ae) {
XMLEditor e = new XMLEditor();
e.copy();
}
}
MFG