Avatar billede dennism Nybegynder
28. september 2006 - 18:29 Der er 25 kommentarer og
1 løsning

Java: Swing

Jeg har et par problemer med min Swing-kode. Jeg har denne lille kode:

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

public class Main {

public static void main(String[] args) {
JFrame window = new JFrame();
Container cont = window.getContentPane();
window.setTitle("My example");
window.setSize(200,200);
window.setResizable(false);

JLabel message = new JLabel("Here is a message for you");
JLabel message2 = new JLabel("Here is another message for you");

JButton button = new JButton("Click me");

cont.add(message, BorderLayout.LINE_START);
cont.add(message2, BorderLayout.LINE_START);
cont.add(button, BorderLayout.PAGE_END);

window.setVisible(true);
}

private void ClickEvent() {
System.out.println("You clicked the button!");
}

}

Hvorfor kan jeg ikke se både message og message2?
Hvordan laver jeg en ActionEvent, sådan at metoden ClickEvent køres, når jeg trykker på knappen?
Avatar billede arne_v Ekspert
28. september 2006 - 19:31 #1
du placerer dem oven i hinanden
Avatar billede dennism Nybegynder
28. september 2006 - 19:48 #2
Hvad kan jeg gøre, for at få message2 til at stå under message?

Kan du give en hådnmed den ActionEvent?
Avatar billede arne_v Ekspert
28. september 2006 - 19:50 #3
du angiver noget forskelligt som andet argument til cont.add
Avatar billede arne_v Ekspert
28. september 2006 - 19:51 #4
button.addActionListener(noget);
Avatar billede arne_v Ekspert
28. september 2006 - 19:51 #5
Har du nogle Swing eksempler at gaa ud fra ?
Avatar billede dennism Nybegynder
28. september 2006 - 20:03 #6
Nej, har ikke kunne finde noget jeg synes kunne bruges :(

Du siger, at jeg skal sætte noget andet som argument til cont.add. Vil det sige, at jeg kun kan tilføje et objekt til LINE_START f.eks.?

Ja, jeg har fundet frem til metoden addActionListener. Men synes ikke at kunne gennemskue, hvad jeg skal sende dem som argument til denne metode. Håber du kan hjælpe mig med det. Hvis det er et større problem, så sig til - så får vi nogle flere point på banen.
Avatar billede arne_v Ekspert
28. september 2006 - 20:10 #7
jeg kan da lige poste nogle eksempler
Avatar billede arne_v Ekspert
28. september 2006 - 20:11 #8
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MultiButton extends JFrame implements ActionListener {
  JButton[] button;
  public MultiButton(int n) {
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      getContentPane().setLayout(new GridLayout(5, n / 5));
      button = new JButton[n];
      for (int i = 0; i < button.length; i++) {
        button[i] = new JButton("Button " + (i + 1));
        button[i].addActionListener(this);
        getContentPane().add(button[i]);
      }
      pack();
  }
  public void actionPerformed(ActionEvent ev) {
      for (int i = 0; i < button.length; i++) {
        if (ev.getSource() == button[i]) {
            JOptionPane.showMessageDialog(null, "Number " + (i + 1));
        }
      }
  }
  public static void main(String[] args) {
      MultiButton f = new MultiButton(20);
      f.show();
  }
}
Avatar billede arne_v Ekspert
28. september 2006 - 20:11 #9
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class OpenAndClose extends JFrame implements ActionListener {
  private JButton opennew;
  private JButton closenew;
  private OpenAndClose newone;
  public OpenAndClose() {
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      getContentPane().setLayout(new GridLayout(1, 2));
      opennew = new JButton("Open new");
      closenew = new JButton("Close new");
      opennew.addActionListener(this);
      closenew.addActionListener(this);
      getContentPane().add(opennew);
      getContentPane().add(closenew);
      pack();
  }
  public void actionPerformed(ActionEvent ev) {
      if (ev.getSource() == opennew) {
        newone = new OpenAndClose();
        newone.show();
      }
      if (ev.getSource() == closenew) {
        newone.hide();
      }
  }
  public static void main(String[] args) {
      OpenAndClose f = new OpenAndClose();
      f.show();
  }
}
Avatar billede arne_v Ekspert
28. september 2006 - 20:12 #10
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MultiClear extends JFrame implements ActionListener {
  private JTextField tf1;
  private JTextField tf2;
  private JTextField tf3;
  private JTextField tf4;
  private JTextField tf5;
  private JTextField tf6;
  private JPanel alltf;
  private JButton clearall;

  public MultiClear() {
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      tf1 = new JTextField();
      tf2 = new JTextField();
      tf3 = new JTextField();
      tf4 = new JTextField();
      tf5 = new JTextField();
      tf6 = new JTextField();
      alltf = new JPanel();
      alltf.setLayout(new GridLayout(2, 3));
      alltf.add(tf1);
      alltf.add(tf2);
      alltf.add(tf3);
      alltf.add(tf4);
      alltf.add(tf5);
      alltf.add(tf6);
      clearall = new JButton("Clear all");
      clearall.addActionListener(this);
      getContentPane().setLayout(new BorderLayout());
      getContentPane().add(alltf, BorderLayout.CENTER);
      getContentPane().add(clearall, BorderLayout.SOUTH);
      pack();
  }

  public void actionPerformed(ActionEvent ev) {
      Component[] comps = alltf.getComponents();
      for(int i = 0; i < comps.length; i++) {
        if(comps[i] instanceof JTextField) {
            ((JTextField)comps[i]).setText("");
        }
      }
  }

  public static void main(String[] args) {
      MultiClear f = new MultiClear();
      f.setVisible(true);
  }
}
Avatar billede arne_v Ekspert
28. september 2006 - 20:14 #11
ikke noedvendigvis specielt gode eksempler

men nogen jeg havde paa lager
Avatar billede dennism Nybegynder
28. september 2006 - 20:16 #12
Kan ikke få lov til at køre nogle af disse eksempler :(

I den sidste får jeg f.eks. denne fejl:
compile-single:
run-single:
Exception in thread "main" java.lang.NoClassDefFoundError: example/MultiClear
Java Result: 1
Avatar billede dennism Nybegynder
28. september 2006 - 20:18 #13
Jeg har forsøgt mig med en anden layout-type, hvilket giver denne kode:

        JFrame window = new JFrame();
        JPanel pane = new JPanel(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        GridBagConstraints c2 = new GridBagConstraints();
       
        window.setTitle("My example");
        window.setSize(200,200);
       
        JLabel message = new JLabel("Here is a message for you");
        JLabel message2 = new JLabel("Here is another message for you");
       
        JButton button = new JButton("Click me");
       
        pane.add(message, c);
        pane.add(message2, c);
        pane.add(button, c2);
             
        window.setVisible(true);

Hvordan kan det være, at jeg ikke kan se nogle af komponenterne, når vinduet åbner? Er problemet, at pane ikke er tilføjet til window?
Avatar billede dennism Nybegynder
28. september 2006 - 20:19 #14
Hov, burde have prøvet inden jeg spurgte :) Det var problemet..

Mit problem er så nu, at disse komponenter står på linie i vinduet. Hvordan kan jeg lave om på det? Vil gerne have sådan at message2 står under message og button er i bunden af vinduet.
Avatar billede dennism Nybegynder
28. september 2006 - 20:22 #15
Mht. til actionlistner så kan jeg f.eks. ikke få lov til at tilføje dette til min klasse:
extends JFrame implements ActionListener

Det giver en masse fejl:
/home/dennis/Java/Example/src/example/Main.java:4: cannot find symbol
symbol: class ActionListener
public class Main extends JFrame implements ActionListener {
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
1 error
Avatar billede arne_v Ekspert
29. september 2006 - 01:50 #16
Exception in thread "main" java.lang.NoClassDefFoundError: example/MultiClear

antyder at du mangler package direktiv
Avatar billede arne_v Ekspert
29. september 2006 - 01:50 #17
/home/dennis/Java/Example/src/example/Main.java:4: cannot find symbol
symbol: class ActionListener

du mangler vel bare en import
Avatar billede dennism Nybegynder
29. september 2006 - 08:17 #18
I hvilken klasse ligger ActionListener?
har prøvet med java.awt.* men det dur ikke:

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

public class Main {
   
      public static void main(String[] args) {     
              JFrame window = new JFrame();
              JPanel pane = new JPanel(new GridBagLayout());
              GridBagConstraints c = new GridBagConstraints();
              GridBagConstraints c2 = new GridBagConstraints();
             
              window.setTitle("My example");
              window.setSize(200,200);

              JLabel message = new JLabel("Here is a message for you");
              JLabel message2 = new JLabel("Here is another message for you");
              JButton button = new JButton("Click me");

              // Adding an action listener for the button:
              button.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ev) {
                            ClickEvent();
                    }
              });

              // Adding label and button to window's content pane:
              pane.add(message, c);
              pane.add(message2, c);
               
              pane.add(button, c2);
              window.add(pane);
              window.setVisible(true);
      }
      private void ClickEvent() {
              System.out.println("You clicked the button!"); 
      }
}
Avatar billede arne_v Ekspert
30. september 2006 - 01:25 #19
import java.awt.*;

eller

import java.awt.event.*;

bør finde den
Avatar billede dennism Nybegynder
30. september 2006 - 09:58 #20
Tak, det var bedre :)

Kan du hjælpe mig med at få lavet et ordentligt layout? Det layout jeg får ud af det jeg postede i tidligere kommentar, ser ikke særlig god ud.
Avatar billede arne_v Ekspert
30. september 2006 - 17:18 #21
det er kun hårdt arbejde !

Jeg vil forslå at du starter med BorderLayout og GridLayout - de er til at finde
ud af.

Hvis man skal have et avanceret skærmbilleder så kan du f.eks. starte med
BorderLayout og så sætte et JPanel med GridLayout i Center af content pane
Avatar billede dennism Nybegynder
02. oktober 2006 - 22:09 #22
Tak for hjælpen her, må jeg bede om et svar?
Har fået gang i noget SpringLayout :)

Kan du evt. hjælpe her (haster):
http://www.eksperten.dk/spm/736084
Avatar billede arne_v Ekspert
02. oktober 2006 - 23:12 #23
svar
Avatar billede arne_v Ekspert
02. oktober 2006 - 23:18 #24
sorry - grafik er uden for mit omraade
Avatar billede dennism Nybegynder
03. oktober 2006 - 07:27 #25
Troede aldrig jeg skulle høre det fra dig ;)
Avatar billede arne_v Ekspert
03. oktober 2006 - 12:54 #26
der er masser af områder jeg ikke er hjemme i
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