[BlueJ Java Hilfe]

11/17/2014 16:49 Bombasticx3#1
Moin Com,

Ich bin so NetBeans verwöhnt, dass ich per Hand weder Fenster noch Buttons schreiben kann.
So weit bin ich:
Code:
import java.awt.*;
import javax.swing.*;

public class Test extends JFrame {
    private JButton jbutton1;
    
    public Test() {
        super("Fenster");
        setLocation(300,300);
        setSize(500,500);
        setLayout(new FlowLayout());
        setVisible(true);
    }
    
}
So zeigt er mir ja nur ein simples Fenster an.
Nun will ich darauf noch Buttons anzeigen lassen mit einem actionListener.
Weiß nur nicht mehr wie das geht und Google macht mich auch nich schlauer.
Kann mich wage an irgwas mit getContentpane().add(jbutton1) oder so. Naja wie dem auch sei. Sollte relativ einfach sein und ohne viel herum. Brauch das für mein Vorabi, von daher so wenig wie möglich Aufwand :D

#edit:
Jetzt ist ein Button drauf, aber nur ein Button und das Fenster hängt oben links minimiert.
Will aber weitere Buttons und dass das Fenster mitten im Bildschirm geöffnet ist.
Code:
import java.awt.*;
import javax.swing.*;

public class Test extends JFrame {
    public static void main(String[] args){
        new Test();}
    
 Test() {
        JFrame frame1 =new JFrame();
        frame1.setTitle("Fenster");
        frame1.setLayout(null);
        frame1.setBounds(300,300,300,300);
        JButton button1 = new JButton("Drück mich");
        button1.setBounds(10,10,80,20);
        add(button1);
        setVisible(true);
    }
    
}
edit #2:
Habs geschafft. So reichts mir aus.
Code:
import javax.swing.*;
import java.awt.*;

public class Fenster extends JFrame {
    public static void maon (String[] args){
        new Fenster();}
        
        Fenster(){ 
    JFrame f = new JFrame();
    setTitle("Fenster");
    setBounds(300,300,300,300);
    setLayout(new FlowLayout());
    JButton b1 = new JButton("Drücken");
    add(b1);
    b1.setBounds(60,60,60,60);
    JButton b2 = new JButton("Press");
    add(b2);
    b2.setBounds(30,30,30,30);
    setVisible(true);
   }
}
Danke im Voraus.
MfG Bombasticx3
11/17/2014 21:47 XxharCs#2
Code:
f.setLocationRelativeTo(null); // Setzt das Fenster in die Mitte
Extende lieber den JPanel statt JFrame, in der Klasse wo du Elemente anzeigen würdest.

Und wegen den Layouts:
Lieber sowas:
Code:
FlowLayout fl = new FlowLayout();
...
fl.add(button1);
fl.add(button2);
fl.add(usw);
...
this.add(fl);
Verwendest du mehrere Panels, genau das selbe Prinzip, nur das du:
Code:
layout.add(komponente);
panel.add(layout);
this.add(panel);
verwendest.


Als gute Übung könntest du das ganze in 3 Klassen kapseln.
Starter Klasse welches dein Frame Klasse startet.
Die Frame Klasse(welche JFrame extended) startet deine Panel Klasse.
Deine Panel Klasse(welche JPanel extended) zeichnet deine Komponenten.
11/18/2014 08:07 Bombasticx3#3
Quote:
Originally Posted by XxharCs View Post
Code:
f.setLocationRelativeTo(null); // Setzt das Fenster in die Mitte
Extende lieber den JPanel statt JFrame, in der Klasse wo du Elemente anzeigen würdest.

Und wegen den Layouts:
Lieber sowas:
Code:
FlowLayout fl = new FlowLayout();
...
fl.add(button1);
fl.add(button2);
fl.add(usw);
...
this.add(fl);
Verwendest du mehrere Panels, genau das selbe Prinzip, nur das du:
Code:
layout.add(komponente);
panel.add(layout);
this.add(panel);
verwendest.


Als gute Übung könntest du das ganze in 3 Klassen kapseln.
Starter Klasse welches dein Frame Klasse startet.
Die Frame Klasse(welche JFrame extended) startet deine Panel Klasse.
Deine Panel Klasse(welche JPanel extended) zeichnet deine Komponenten.
Hab ja zum Vorabi noch meine alten Programme, dich und die Api. Also wird schon.Das mit dem ganzen Extenden ist noch zu überflüssig dafür, aber werd ich noch brauchen, also Danke :)
11/19/2014 14:55 Strew#4
Hier mal ein kleiner Ausschnitt:

Kann nicht ganz sicher sagen ob der fehlerfrei ist,
da ich grad leider nur Notepadd++ aufm PC hab.

Bin allerdings Java-Neuling und würde mich daher
nicht 100% drauf verlassen.

Falls noch Kleinigkeiten fehlen, editier sie grad flott selbst.

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class AdressBuch_v1 extends JFrame {

	Container c;
	JButton bzurueck;
	
	public AdressBuch_v1() {
		
		c = getContentPane();
		c.setLayout(new FlowLayout());

		bzurueck = new JButton ("Zurück");
		bzurueck.addActionListener(new ButtonListenerZurueck());
		
		c.add(bzurueck);
	}

	public static void main(String[] args) {
		
		AdressBuch_v1 fenster = new AdressBuch_v1();
		fenster.setTitle("Adressbuch");
		fenster.setSize(400,400);
		fenster.setVisible(true);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}
	
	class ButtonListenerZurueck implements ActionListener {
		
		public void actionPerformed(ActionEvent e){
	
		}
	}

	
}

Mit freundlichen Grüßen,

Strew
11/25/2014 20:11 chrisyou#5
Code:
package elitepvpers;
import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class JFrameTut extends JFrame implements ActionListener { //ActionListener implementieren
	private JButton b1,b2; //Hier deklarieren, damit sie von der ganzen Klasse wahrgenommen werden (für actionperformed-methode)
	public static void main (String[] args){
		new JFrameTut();}

	JFrameTut(){ 
		setTitle("Fenster");
		setBounds(300,300,300,300);
		setLayout(new FlowLayout());
		b1 = new JButton("Drücken");
		b1.addActionListener(this); //Lässt ActionListener auf b1 "horchen"
		add(b1);		
		b1.setBounds(60,60,60,60);
		b2 = new JButton("Press");
		b2.addActionListener(this); //Lässt ActionListener auf b2 "horchen"
		add(b2);	
		b2.setBounds(30,30,30,30);
		setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==b1){ //Ausgang des ActionEvents = b1, dann
			System.out.println("b1 pressed");
		}else if(e.getSource()==b2){ //Ausgang des ActionEvents = b2, dann
			System.out.println("b2 pressed");
		}
	}
}
Ich habe mich mal an deinem eigenen Lösungsversuch (3. Edit) orientiert und dir einen ActionListener implementiert, wie gewünscht. Ist auch alles kommentiert, sodass du es nachvollziehen kannst :)

Ich empfehle dir allerdings, dich mehr mit Java Swing und LayoutManagern zu beschäftigen.

Mit einem GridBagLayout z.B. lässt sich das Layout generell einfacher und strukturierter anfertigen.

Wenn noch Fragen sind, bitte :)