Klassen verbinden?

  • Themenstarter Themenstarter Gast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo,
kann mir jemand weiterhelfen, wie kann ich zwei Klassen verbinden, damit ich die eine in der anderen verwenden kann, so wie hier:

Meine erste Klasse ist:
Code:
public class analyser extends javax.swing.JFrame
{
    public analyser() 
    {
        initComponents();
    }
    private void initComponents() 
   {
    //hier sind alle Komponente beschrieben, wie jlabel, jcombobox etc.
    }

    //dann kommen hier viele Methoden wie z.b.
    a(){}
    b(){}
    c(){}

    //so und das ist das Ende der einen Klasse

   private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                             
        System.exit(0);
    }                                            
    
    public static void main(String args[]) throws FileNotFoundException, IOException {
       
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new analyser().setVisible(true);
            }
        });
    }


Nun kommt die "andere" Klasse, die ich gerne in der "oberen" Klasse verwenden würde und in der "anderen" Klasse auch Methoden von der "oberen" Klasse verwenden kann?!

Code:
package org.jfree.chart.demo;

import java.awt.Color;
import java.awt.Font;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.IntervalMarker;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.Layer;
import org.jfree.ui.RectangleAnchor;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.TextAnchor;

import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.table.DefaultTableModel; 




public class Main extends ApplicationFrame 
{
    public Main(String title) 
    {
        super(title);
        IntervalXYDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset);
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        setContentPane(chartPanel);
    }
   
    private IntervalXYDataset createDataset() 
    {
        final XYSeries series = new XYSeries("Random Data");
        series.add(1.0, 500.2);
        series.add(5.0, 294.1);
        series.add(4.0, 100.0);
        series.add(12.5, 734.4);
        series.add(17.3, 453.2);
        series.add(21.2, 500.2);
        series.add(21.9, null);
        series.add(25.6, 734.4);
        series.add(30.0, 453.2);
        final XYSeriesCollection dataset = new XYSeriesCollection(series);
        return dataset;
    }

    private JFreeChart createChart(IntervalXYDataset dataset) 
    {
        final JFreeChart chart = ChartFactory.createXYBarChart(
            "XY Series Demo",
            "X", 
            false,
            "Y", 
            dataset,
            PlotOrientation.VERTICAL,
            true,
            true,
            false
        );
        XYPlot plot = (XYPlot) chart.getPlot();
        final IntervalMarker target = new IntervalMarker(400.0, 700.0);
        target.setLabel("Target Range");
        target.setLabelFont(new Font("SansSerif", Font.ITALIC, 11));
        target.setLabelAnchor(RectangleAnchor.LEFT);
        target.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
        target.setPaint(new Color(222, 222, 255, 128));
        plot.addRangeMarker(target, Layer.BACKGROUND);
        return chart;    
    }
    
    
       
    public static void main( String[] args) 
    {

        final Main demo = new Main("XY Series Demo 3");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);

    }
}


Danke im Voraus und Gruss
 
Klassen groß schreiben!

Exemplarvariablen definieren und im Konstruktor austauschen
z.B.

Code:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        new A();
    }
}


class A
{
    private B b;

    A()
    {
        this.b = new B(this);
        this.b.b();
    }

    void a()
    {
        System.out.println("a");
    }
}


class B
{
    private A a;

    B(A a)
    {
        this.a = a;
        this.a.a();
    }

    void b()
    {
        System.out.println("b");
    }
}
 
also im regefall machst du nur ein neues Objekt wenn du es auch wirklich brauchst ...

also wenn du deine main in einer methode brauchst, dann machst du es auch nur dort

bsp:

Main m = new Main("Mein Titel");

dann kannst du mit

m.methode();

die methoden aufrufen ... wenn du es im konstruktor machst, bleibt das objekt bestehen, bis die gesamte klasse die es im konstruktor aufruft, mit dem garbagekollektor weggeräumt wird und somit keine referenz mehr auf das new Objekt mehr besteht ...

machst du es in deiner methode .. räumt der kollektor das früher weg ... also hast du dadruch weniger speicherbelastung

bei kleinen Programmen egal .. bei grossen projekt sollte man auf sowas achten
 
Hi,
es klappt irgendwie nicht, wenn ich es so mache:

Code:
public class analyser extends javax.swing.JFrame
{
    public analyser()
    {
        initComponents();
    }
    private void initComponents()
   {
    //hier sind alle Komponente beschrieben, wie jlabel, jcombobox etc.
    }

    //dann kommen hier viele Methoden wie z.b.
    a(){}
    b(){}
    c(){}

    //so und das ist das Ende der einen Klasse

   private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                             
        System.exit(0);
    }                                           
   
    public static void main(String args[]) throws FileNotFoundException, IOException {

       [b]new A;[/b]
       
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new analyser().setVisible(true);
            }
        });
    } 




class A extends ApplicationFrame 
{
    A(String title) 
    {
        super(title);
        IntervalXYDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset);
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        setContentPane(chartPanel);
    }
   
    private IntervalXYDataset createDataset() 
    {
        final XYSeries series = new XYSeries("Random Data");
        series.add(1.0, 500.2);
        series.add(5.0, 294.1);
        series.add(4.0, 100.0);
        series.add(12.5, 734.4);
        series.add(17.3, 453.2);
        series.add(21.2, 500.2);
        series.add(21.9, null);
        series.add(25.6, 734.4);
        series.add(30.0, 453.2);
        final XYSeriesCollection dataset = new XYSeriesCollection(series);
        return dataset;
    }

    private JFreeChart createChart(IntervalXYDataset dataset) 
    {
        final JFreeChart chart = ChartFactory.createXYBarChart(
            "XY Series Demo",
            "X", 
            false,
            "Y", 
            dataset,
            PlotOrientation.VERTICAL,
            true,
            true,
            false
        );
        XYPlot plot = (XYPlot) chart.getPlot();
        final IntervalMarker target = new IntervalMarker(400.0, 700.0);
        target.setLabel("Target Range");
        target.setLabelFont(new Font("SansSerif", Font.ITALIC, 11));
        target.setLabelAnchor(RectangleAnchor.LEFT);
        target.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
        target.setPaint(new Color(222, 222, 255, 128));
        plot.addRangeMarker(target, Layer.BACKGROUND);
        return chart;    
    }
    
    
       
    public static void main( String[] args) 
    {
        final A demo = new A("XY Series Demo 3");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }
}

Da kommt die folgende Fehlermeldung:
symbol : constructor A()
location: class org.jfree.chart.demo.A
new A();
 
du musst für new A("einen string mitgeben")

da dieser im konstruktor von A steht und diesen benötigt


ausserdem macht man die main klasse, nicht als innerclass ...

deswegen heisst es mainklasse ... das kommt alleine in eine eigene klasse und nicht in eine innerclass
 
Ja jetzt kommen auch keine Fehlermeldungen, ich kriege auch mein Projekt gestartet, aber, wie kriege ich diese Klasse A gestartet aus diesem Projekt?
 
erstmal entscheidest du dich für eine main, ein Programm hat immer noch genau eine main,
um welche geht es denn gerade?

und was ist nun konkret dein Problem..
 
Ja, jetzt habe ich auch nur eine Main und zwar hier:

Code:
public class analyser extends javax.swing.JFrame
{
    public analyser()
    {
        initComponents();
    }
    private void initComponents()
   {
    //hier sind alle Komponente beschrieben, wie jlabel, jcombobox etc.
    }

    //dann kommen hier viele Methoden wie z.b.
    a(){}
    b(){}
    c(){}

    //so und das ist das Ende der einen Klasse

   private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                             
        System.exit(0);
    }                                           
   
    public static void main(String args[]) throws FileNotFoundException, IOException {
       
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new A("JA AHUJEJU").setVisible(true);
            }
        });

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new analyser().setVisible(true);
            }
        });
    }

Jetzt wollte ich die Klasse analyser, also die oben starten und diese soll auch die KLasse A auslösen!

Die Klasse A sieht jetzt so aus:
Code:
class A extends ApplicationFrame 
{
    A(String title) 
    {
        super(title);
        //IntervalXYDataset dataset = createDataset();
        final XYSeries series = new XYSeries("Random Data");
        series.add(1.0, 500.2);
        series.add(5.0, 294.1);
        series.add(4.0, 100.0);
        series.add(12.5, 734.4);
        series.add(17.3, 453.2);
        series.add(21.2, 500.2);
        series.add(21.9, null);
        series.add(25.6, 734.4);
        series.add(30.0, 453.2);
        final XYSeriesCollection dataset = new XYSeriesCollection(series);
        
       //JFreeChart chart = createChart(dataset);
        final JFreeChart chart = ChartFactory.createXYBarChart(
            "XY Series Demo",
            "X", 
            false,
            "Y", 
            dataset,
            PlotOrientation.VERTICAL,
            true,
            true,
            false
        );
        XYPlot plot = (XYPlot) chart.getPlot();
        final IntervalMarker target = new IntervalMarker(400.0, 700.0);
        target.setLabel("Target Range");
        target.setLabelFont(new Font("SansSerif", Font.ITALIC, 11));
        target.setLabelAnchor(RectangleAnchor.LEFT);
        target.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
        target.setPaint(new Color(222, 222, 255, 128));
        plot.addRangeMarker(target, Layer.BACKGROUND);
        
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        setContentPane(chartPanel);
               
        final A demo = new A("XY Series Demo 3");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }
}
 
Code:
public static void main(String args[]) throws FileNotFoundException, IOException {

       
       
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new analyser().setVisible(true);
            }
        });
    }
deine erste klasse ...

Code:
import javax.swing.*;

public class Analyser extends JFrame
{
    private A klasseA;
     public analyser()
    {
        klasseA = new A("Test");
        initComponents();
    }
    private void initComponents()
   {
    //hier sind alle Komponente beschrieben, wie jlabel, jcombobox etc.
    }

    //dann kommen hier viele Methoden wie z.b.
    a(){}
    b(){}
    c(){}

    //so und das ist das Ende der einen Klasse

   private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                             
        System.exit(0);
    }

dann hast du deine klasse A in deine klasse analyser eingebunden
und kannst da alle methoden mit

klasseA.methode() aufrufen
 
> diese soll auch die KLasse A auslösen!

klingt nicht nach der Programmiersprache Java, worum gehts konkret?

wenn du im Konstrktur von analyser ein Fenster A erstellen und anzeigen möchtest, dann tue es oder benenne deine Problem dabei,
dann aber das new A() aus der main weg, sonst hast du zwei A-Fenster

wenn du, wie ursprünglich mal das Thema, analyzer eine Referenz auf A geben willst, dann tue dies doch

java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
A a = new A("JA AHUJEJU").setVisible(true);
new analyser(a).setVisible(true);
}
});

der Konstruktor von analyzer muss natürlich den Parameter korrekt verarbeiten

Klassen groß schreiben!!
und andere Namen als A wählen,
für mein Beispiel mit 10 Zeilen-Klassen geht das ja noch halbwegs, bei dir sieht das schlimm aus,
Main war auch nicht toll, aber etwas besser
 
Habe diesbezüglich auch noch ne Frage. Und zwar habe ich mehrere Klassen, und will diese einfach nur miteinander verbinden. Ein Beispiel habe ich schon gesehen "private User user;"
das erste User ist die andere Klasse, aber was soll das zweite user, was stellt dieses dar?
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben