Avatar billede hejhejhej Nybegynder
15. august 2003 - 11:42 Der er 13 kommentarer og
1 løsning

Hjælp til GUI i java

Jeg har fundet et eksempel på lidt GUI i java, men jeg kan ikke få det til at fungere. Jeg bruger intelliJ 3.0.1 . Jeg får flg fejl:
java.lang.NoSuchMethodError: main

Og eksemplet ser således ud:

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

public class Hej extends JPanel
{
  public Hej()
  {
      setBackground (Color.green);

      JLabel l1 = new JLabel ("Layout Manger Demonstration");
      JLabel l2 = new JLabel ("Choose a tab to see an example of " +
                              "a layout manager.");

      add (l1);
      add (l2);
  }
}
Avatar billede arne_v Ekspert
15. august 2003 - 11:47 #1
Det er en nydelig lille klasse.

Men der er ikke noget hoved-program så selvfølgelig kan
det ikke køres.
Avatar billede _carsten Nybegynder
15. august 2003 - 11:47 #2
I din classe mangeler du følgende metode

public static void main(String[] args){
Avatar billede _carsten Nybegynder
15. august 2003 - 11:48 #3
public static void main(String[] args){
Avatar billede arne_v Ekspert
15. august 2003 - 11:48 #4
For at køre en applikation skal man have en metode:

public static void main(String[] args)

so så instantierer diverse GUI klasser.

Typisk en JFrame som så kan indeholde diverse andre GUI komponenter.
Avatar billede _carsten Nybegynder
15. august 2003 - 11:48 #5
public static void main(String[] args){
    new Hej();
}

Tredje gang er lykkens gang !
Avatar billede _carsten Nybegynder
15. august 2003 - 11:51 #6
Nedenstående virker

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

public class Hej extends JFrame
{
  public Hej()
  {
      setBackground (Color.green);

      JLabel l1 = new JLabel ("Layout Manger Demonstration");
      JLabel l2 = new JLabel ("Choose a tab to see an example of " +
                              "a layout manager.");

      add (l1);
      add (l2);
   
      setSize(400,400);
  }

  public static void main(String[] args){
    new Hej();
  }
}
Avatar billede _carsten Nybegynder
15. august 2003 - 11:53 #7
Du skal typisk extends en JFrame, JApplet eller JWindow

herefter kan du tilføje paneler
Avatar billede _carsten Nybegynder
15. august 2003 - 12:02 #8
Det går vist for stærkt i dag

Ret: new Hej();        til:  new Hej().show();
Avatar billede hejhejhej Nybegynder
15. august 2003 - 12:04 #9
Jeg får desværre en fejl ved carsten's forslag :
java.lang.Error: Do not use Hej.add() use Hej.getContentPane().add() instead
    at javax.swing.JFrame.createRootPaneException(JFrame.java:465)
    at javax.swing.JFrame.addImpl(JFrame.java:491)
    at java.awt.Container.add(Container.java:307)
    at Hej.<init>(Hej.java:19)
    at Hej.main(Hej.java:9)
Avatar billede arne_v Ekspert
15. august 2003 - 12:07 #10
Så gør du bare som den forslår !

add(l1);

rettes til:

getContentPane().add(l1);
Avatar billede hejhejhej Nybegynder
15. august 2003 - 12:07 #11
Havde ikke set dit sidste svar. Men der kommer stadig en fejl:
java.lang.Error: Do not use Hej.add() use Hej.getContentPane().add() instead
    at javax.swing.JFrame.createRootPaneException(JFrame.java:465)
    at javax.swing.JFrame.addImpl(JFrame.java:491)
    at java.awt.Container.add(Container.java:307)
    at Hej.<init>(Hej.java:15)
    at Hej.main(Hej.java:22)
Avatar billede _carsten Nybegynder
15. august 2003 - 12:15 #12
Det er vist godt det er fredag!

Vi prøver endnu engang.


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

public class Hej extends JFrame
{
  public Hej()
  {
      getContentPane().setLayout(new java.awt.FlowLayout());
     
      JLabel l1 = new JLabel ("Layout Manger Demonstration");
      JLabel l2 = new JLabel ("Choose a tab to see an example of " +
                              "a layout manager.");

      getContentPane().add(l1);
      getContentPane().add(l2);
      setBackground (Color.green);
      setSize(400,400);
  }

  public static void main(String[] args){
    new Hej().show();
  }
}
Avatar billede hejhejhej Nybegynder
15. august 2003 - 12:22 #13
OK. Nu virker det. Tak for hjælpen :-)
Avatar billede _carsten Nybegynder
15. august 2003 - 12:22 #14
Hvis du ikke hver gang gider at skrive getContentPane().add(XXXXX);

Kan du gøre følgende:

Container c = getContentPane();

c.add(XXXXX);
c.add(YYYYY);
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