Avatar billede morteeart Nybegynder
09. september 2004 - 22:08 Der er 10 kommentarer og
1 løsning

Koble 2 class filer samme i en med faneblade

hej

Jeg har 2 mindre programmer lavet i swing
begge kombileret ned i class filer

Jeg overvejer så ide'en med at koble dem sammen i en med faneblade,
så kan jeg bare importere koden ind i mit faneblads kode ?

og hvordan ?
Avatar billede mikkelbm Nybegynder
09. september 2004 - 23:44 #1
Det kommer an på hvordan dine to små programmer ser ud.

Hvis de extender en JFrame skal det laves om til f.eks. et JPanel.

Derefter kan du bare adde dem til dit faneblad.
Avatar billede mikkelbm Nybegynder
09. september 2004 - 23:50 #2
Et super simpelt eksempel:

import java.awt.*;
import javax.swing.*;

public class Faneblad extends JFrame
{
    private JTabbedPane jPane;
   
    public Faneblad()
    {
        setSize(400, 400);   
       
        jPane = new JTabbedPane();
        jPane.add("Klasse A", new SmaalA());
        jPane.add("Klasse B", new SmaalB());
       
        this.getContentPane().add(jPane, BorderLayout.CENTER);
    }
   
    public static void main(String[] args)
    {
        new Faneblad().setVisible(true);   
    }   
}

class SmaalA extends JPanel
{
    public SmaalA()
    {
        this.setLayout(new GridLayout(10, 1));
        for (int i = 0; i<10; i++)   
            this.add(new JButton("Knap"+i));
           
    }   
}


class SmaalB extends JPanel
{
    public SmaalB()
    {
        this.setLayout(new GridLayout(1, 10));
        for (int i = 0; i<10; i++)   
            this.add(new JButton("Knap"+i));
           
    }   
}
Avatar billede morteeart Nybegynder
10. september 2004 - 02:57 #3
ja, det virker meget fint.

Men der hvor du har skrevet class SmallA og SmallB
der ville jeg have nogle ala include(enfunktion.java)
jeg har prøvet import, men kan ikke få det til at virke.
Avatar billede mikkelbm Nybegynder
10. september 2004 - 08:52 #4
Du kan ikke bruge include i Java. Det eneste der har nogenlunde samme effekt er, hvis du extender(arver) en anden klasse - dog er der så det problem, at man kun kan extende fra én klasse.

Men hvis du derimod opretter instanser af klasserne SmaalA og SmaalB, har du adgang til alle public metoder i disse klasser.

Jeg har modificeret eksemplet fra før (Du skal se SmaalA og SmaalB som dine to små applikationer:

I nedenstående opretter jeg en instans af hver klasse, når jeg siger:
a = new SmaalA();
b = new SmaalB();

så har jeg, hvis jeg bruger de to variabler a,b adgang til alle public metoder i de to klasser.
eks.
a.getNavn(); // Vil returnere det der er skrevet i getNavn-metoden.


Husk! At dine to små applikationer (.class filerne) skal ligge i samme mappe eller i hvert fald et sted i classpath der kan findes.

import java.awt.*;
import javax.swing.*;

public class Faneblad extends JFrame
{
    private JTabbedPane jPane;
    private SmaalA a;
    private SmaalB b;
   
    public Faneblad()
    {
        setSize(400, 400);   
       
        a = new SmaalA();
        b = new SmaalB();
           
        jPane = new JTabbedPane();
        jPane.add(a.getNavn(), a);
        jPane.add(b.getNavn(), b);
       
        this.getContentPane().add(jPane, BorderLayout.CENTER);
    }
   
    public static void main(String[] args)
    {
        new Faneblad().setVisible(true);   
    }   
}

class SmaalA extends JPanel
{
    public SmaalA()
    {
        this.setLayout(new GridLayout(10, 1));
        for (int i = 0; i<10; i++)   
            this.add(new JButton("Knap"+i));
           
    }   
   
    public String getNavn()
    {
        return "Klasse A";   
    }
}


class SmaalB extends JPanel
{
    public SmaalB()
    {
        this.setLayout(new GridLayout(1, 10));
        for (int i = 0; i<10; i++)   
            this.add(new JButton("Knap"+i));
           
    }
   
    public String getNavn()
    {
        return "Klasse B";   
    }   
}
Avatar billede morteeart Nybegynder
10. september 2004 - 11:57 #5
hmm, så lyder copy-paste nemmere..
JEg har så prøvet at sætte dem sammen, og sætte funktionerne fra de 2 andre programmer til private, pga. at nogle af objektnavnene går igen.

# source #

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.text.*;    // importere det bibliotek som skal bruges til afrunding

public class faneblad extends JApplet
{

    private JTabbedPane jPane;

    public faneblad()
    {
        setSize(400, 400);

        jPane = new JTabbedPane();
        jPane.add("Klasse A", new faneblad());
        jPane.add("Klasse B", new ProjektOpg1());

        this.getContentPane().add(jPane, BorderLayout.CENTER);
    }

    public static void main(String[] args)
    {
        new faneblad().setVisible(true);
    }
}

/***** Fiboncciatal *** START ****/

private class Fibonaccital extends JApplet {

      /* Intalisere nogle objekter */
      JLabel overskrift = new JLabel(" Fibonaccitalrækken ");
      JLabel underoverskrift = new JLabel(" Indtast Tal ");
      JTextField MaxTal = new JTextField(4);
      JLabel blank = new JLabel("\n");
      JLabel blank2 = new JLabel("\n");
      JButton udregnKnap = new JButton("Udregn!");
      JTextArea textfeltet = new JTextArea(10,25);


  public Fibonaccital() {

      /* sætter layout'et til at være GidBagLayout */

      Container container = getContentPane();
      GridBagLayout layout = new GridBagLayout();
      container.setLayout(layout);
      GridBagConstraints constraints = new GridBagConstraints();

      /* sætter størrelse på hele layoutet */

      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 0;
      constraints.gridy = 0;
      constraints.gridwidth = 3;
      constraints.gridheight = 6;
     
      /*
      Tilføjer et objekt til gridbag
      alt fra  constraints.fill til container.add() er de parametre som skal bruges
      og disse er kopieret ned, derfor står forklaringen kun én gang. */

      constraints.fill = GridBagConstraints.HORIZONTAL; // bestemmer hvordan boksen skal kunne udvide sig. I dette tilfælde kun horisontalt.
      constraints.gridx = 0;  // placerings kolonne
      constraints.gridy = 0;  // placerings række
      constraints.gridwidth = 3;  // bredde angivet i antal kolonner
      constraints.gridheight = 1;  // højde angivet i antal rækker

      layout.setConstraints(overskrift,constraints);    // Tilføjer objektet (i dette tilfælde overskriften) til gridbag.
      container.add(overskrift);                        // tilføjer det til layoutet.

      constraints.fill = GridBagConstraints.BOTH;    // Kan udvide sig i begge retning
      constraints.gridx = 0;
      constraints.gridy = 1;
      constraints.gridwidth = 2;
      constraints.gridheight = 1;

      layout.setConstraints(blank,constraints);    //  Tilføjer Blank
      container.add(blank);

      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 0;
      constraints.gridy = 2;
      constraints.gridwidth = 1;
      constraints.gridheight = 1;

      layout.setConstraints(underoverskrift,constraints);    // Tilføjer underoverskriften
      container.add(underoverskrift);

      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 1;
      constraints.gridy = 3;
      constraints.gridwidth = 2;
      constraints.gridheight = 3;

      layout.setConstraints(textfeltet,constraints);    // Tilføjer textarea
      container.add(textfeltet);


      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 0;
      constraints.gridy = 3;
      constraints.gridwidth = 1;
      constraints.gridheight = 1;

      layout.setConstraints(MaxTal,constraints);    // Tilføjer brugerinput
      container.add(MaxTal);

      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 0;
      constraints.gridy = 4;
      constraints.gridwidth = 1;
      constraints.gridheight = 1;

      layout.setConstraints(blank2,constraints);    // Tilføjer blank
      container.add(blank2);


      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 0;
      constraints.gridy = 5;
      constraints.gridwidth = 1;
      constraints.gridheight = 1;

      layout.setConstraints(udregnKnap,constraints);    // Tilføjer knappen
      container.add(udregnKnap);

      udregnKnap.addActionListener(new ActionListener() {  // Tilføjer en actionListener til knappen, som kan aktivere en funktion ved klik
      public void actionPerformed(ActionEvent evt) {
      udregnKnapActionPerformed(evt);
      }
        }
      );

      setSize( 350, 300 );
      setVisible( true );
  }

  private void udregnKnapActionPerformed(ActionEvent evt) {    // laver en private funktion som er tilknyttet en actionlistener.

  int MaxTallet = Integer.parseInt(MaxTal.getText());  // Henter værdien af MaxTal

  textfeltet.setText("");                              // reset'er textareaet når der trykkes på knappen..
  textfeltet.append("0 \n" + "1 \n");

  int n = 0;
  int i = 1;
  int z = 0;
  while ( z < MaxTallet ) {

  z = n + i;
  n = i;
  i = z;

  if ( z <= MaxTallet ) {
  textfeltet.append(String.valueOf(z) + "\n");          // Tilføjer værdien til textareaet
  }
  if ( MaxTallet < 1 ) {
  textfeltet.setText("");
  }
  if ( MaxTallet > 90 ) {
  textfeltet.setText("  Tallet er for højt  ");
  }
  }

  }

}

/***** Fiboncciatal *** SLUT *****/

/***** Andengradsligninger *** START ****/

private class ProjektOpg1 extends JApplet {

      JLabel overskrift = new JLabel( " Indtast a,b & c " );
      JTextField inputA = new JTextField(4);
      JTextField inputB = new JTextField(4);
      JTextField inputC = new JTextField(4);
      JLabel underskrift = new JLabel( " Antal Nulpunkter " );
      JLabel blank = new JLabel("\n");
      JLabel blank2 = new JLabel("\n");
      JTextField antalNP = new JTextField(4);
      JLabel xValues = new JLabel( " X-værdier" );
      JTextField xPlus = new JTextField(2);
      JTextField xMinus = new JTextField(2);
      JButton udregnKnap = new JButton("Udregn !");

  public ProjektOpg1() {

      Container container = getContentPane();
      GridBagLayout layout = new GridBagLayout();
      container.setLayout(layout);
      GridBagConstraints constraints = new GridBagConstraints();

      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 0;
      constraints.gridy = 0;
      constraints.gridwidth = 3;
      constraints.gridheight = 8;

      constraints.fill = GridBagConstraints.HORIZONTAL;
      constraints.gridx = 0;
      constraints.gridy = 0;
      constraints.gridwidth = 3;
      constraints.gridheight = 1;

      layout.setConstraints(overskrift,constraints);    // Tilføjer overskriften
      container.add(overskrift);

/*********** START INPUTS **********************************************/

      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 0;
      constraints.gridy = 1;
      constraints.gridwidth = 1;
      constraints.gridheight = 1;

      layout.setConstraints(inputA,constraints);  // Add inputA
      container.add(inputA);

      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 1;
      constraints.gridy = 1;
      constraints.gridwidth = 1;
      constraints.gridheight = 1;

      layout.setConstraints(inputB,constraints);  // Add inputB
      container.add(inputB);

      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 2;
      constraints.gridy = 1;
      constraints.gridwidth = 1;
      constraints.gridheight = 1;

      layout.setConstraints(inputC,constraints);  // Add inputC
      container.add(inputC);

/*********** END INPUTS *********** Start Nulpunkter *******************/
     
      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 0;
      constraints.gridy = 2;
      constraints.gridwidth = 3;
      constraints.gridheight = 1;

      layout.setConstraints(blank,constraints);  // Blank space
      container.add(blank);


      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 0;
      constraints.gridy = 3;
      constraints.gridwidth = 1;
      constraints.gridheight = 1;

      layout.setConstraints(underskrift,constraints);  // Add nulpunks lablet
      container.add(underskrift);

      constraints.fill = GridBagConstraints.HORIZONTAL;
      constraints.gridx = 1;
      constraints.gridy = 3;
      constraints.gridwidth = 2;
      constraints.gridheight = 1;

      layout.setConstraints(antalNP,constraints);  // Add antal nulpunker
      container.add(antalNP);

      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 0;
      constraints.gridy = 4;
      constraints.gridwidth = 3;
      constraints.gridheight = 1;

      layout.setConstraints(blank2,constraints);  // Blank space
      container.add(blank2);
     
/*********** END nulpunker *********** Start xværdier *******************/

      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 0;
      constraints.gridy = 5;
      constraints.gridwidth = 1;
      constraints.gridheight = 1;

      layout.setConstraints(xValues,constraints);  // Add antal en label mere
      container.add(xValues);

      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 0;
      constraints.gridy = 6;
      constraints.gridwidth = 1;
      constraints.gridheight = 1;

      layout.setConstraints(xPlus,constraints);  // x+
      container.add(xPlus);

      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 0;
      constraints.gridy = 7;
      constraints.gridwidth = 1;
      constraints.gridheight = 1;

      layout.setConstraints(xMinus,constraints);  // x-
      container.add(xMinus);

      constraints.fill = GridBagConstraints.BOTH;
      constraints.gridx = 1;
      constraints.gridy = 6;
      constraints.gridwidth = 2;
      constraints.gridheight = 2;

      layout.setConstraints(udregnKnap,constraints);  // Knappen som udregner resultatet.
      container.add(udregnKnap);

      udregnKnap.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
      udregnKnapActionPerformed(evt);
      }
        }
      );

      setSize( 250, 270 );
      setVisible( true );
  }


  private void udregnKnapActionPerformed(ActionEvent evt) {

  if(inputA.getText()==null || inputA.getText().equals("")) {
  inputA.setText("0");
  }
 
  if(inputB.getText()==null || inputB.getText().equals("")) {
  inputB.setText("0");
  }

  if(inputC.getText()==null || inputC.getText().equals("")) {
  inputC.setText("0");
  }

  DecimalFormat fmt = new DecimalFormat("#0.000");

  double a = Integer.parseInt(inputA.getText());
  double b = Integer.parseInt(inputB.getText());
  double c = Integer.parseInt(inputC.getText());

  double D = (b*b)-4*a*c;

  if ( D == 0 ) {
  antalNP.setText("1");
  }
  if ( D > 0 ) {
  antalNP.setText("2");
  }
  if ( D < 0 ) {
  antalNP.setText("0");
  }

  double xPlusRes = (-b + (Math.sqrt((b*b)-4*a*c))) / (a * 2);
  String xPlusString = String.valueOf(fmt.format(xPlusRes));
  xPlus.setText(xPlusString);

  double xMinusRes = (-b - (Math.sqrt((b*b)-4*a*c))) / (a * 2);
  String xMinusString = String.valueOf(fmt.format(xMinusRes));
  xMinus.setText(xMinusString);

  if ( (a == 0) && (b == 0) && (c == 0) ) {
  xMinus.setText("");
  xPlus.setText("");
  }

  }

}

/***** Andengradsligninger *** SLUT ****/





### souce slut ###

Men jeg får følgende fejl:

> Udfører: C:\Programmer\ConTEXT\ConExec.exe "C:\j2sdk1.4.2_04\bin\javac.exe" "C:\apache\htdocs\Java\Projekt1\faneblad.java"

C:\apache\htdocs\Java\Projekt1\faneblad.java:33: modifier private not allowed here
private class Fibonaccital extends JApplet {
        ^
C:\apache\htdocs\Java\Projekt1\faneblad.java:178: modifier private not allowed here
private class ProjektOpg1 extends JApplet {
        ^
2 errors
> Udfører
Avatar billede morteeart Nybegynder
10. september 2004 - 16:05 #6
nogle forslag til hvordan det kan løses ?
Avatar billede mikkelbm Nybegynder
10. september 2004 - 21:44 #7
Hmmm - I øjeblikket adder du en applet til en applet - det kunne jeg ikke forestille mig var en god idé (jeg har aldrig prøvet det)

Hvad hvis du lader din Fibonacital og ProjektOpg1 arve fra JPanel i stedet?
Og så i dine constructorer adder du bare din komponenter direkte til panelet i stedet for at hive en Container ud:

noget a la

Container container = getContentPane();
GridBagLayout layout = new GridBagLayout();
container.setLayout(layout);

bliver til:

GridBagLayout layout = new GridBagLayout();
this.setLayout(layout);

this.add(et_eller_andet);
this.add(noget_andet);
this.add(noget_trejde);

og så videre.
Avatar billede mikkelbm Nybegynder
10. september 2004 - 21:53 #8
og en anden ting jeg lige så:

du har erklæret dine to klasser private uden for fanebladsklassen - det må du ikke.
Eller det vil i hvert fald ikke gi' nogen mening.

Derfor 3 muligheder:

1) Fjern ordet private og det vil virke - dette kun hvis du vil ha' dem i samme fil.

2) Flyt Fibonacital og ProjektOpg1 ud i hver sin fil - og erklær klassen public.

3) Hvis du absolut vil ha' dem private, skal du ligge dem inden for klassen faneblad altså:

public class faneblad
{
  //......
  private class Fibonacital
  {
      // Fyld
  }
  //..........
}
Avatar billede mikkelbm Nybegynder
10. september 2004 - 21:56 #9
og lige en ting mere :)

jPane.add("Klasse A", new faneblad()); // Her tilføjer du en klasse til sig selv

skal jo nok være:

jPane.add("Klasse A", new Fibonacital());

Ellers vil dit program i hvert fald gå i en uendelig løkke og crashe...
Avatar billede mikkelbm Nybegynder
10. september 2004 - 21:59 #10
og endnu en:

Din klasse faneblad extender JApplet
Dette er også meget fint, men så har du ikke brug for din main.

Hvis du vil se det i et vindue (JFrame) skal du extende JFrame.
Avatar billede morteeart Nybegynder
11. september 2004 - 01:02 #11
okay, mange tak. Jeg har fået det til at virke nu.

problemet var at jeg kombileret det på en forkert måde.

:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester