newby: fenster erstellen

Status
Nicht offen für weitere Antworten.

geissbock

Mitglied
Code:
import java.awt.GridLayout;
import javax.swing.*;
import javax.swing.event.*;

public class Layout extends JPanel //implements MouseInputListener
{
  private JButton[][] felder_links = new JButton[10][10];
  public Layout()
  {
    super();

    JPanel p;
	add(p = new JPanel(new GridLayout(10,10,2,2)));


	for (int i=0;i<10;i++)
	{
		for (int j=0;j<10;j++)
		{
			felder_links[i][j] = new JButton();
            //felder_links[i][j].addActionListener( this );
            p.add( felder_links[i][j] );
            felder_links[i][j].setBackground(java.awt.Color.blue);
		}
	}
	p.setBackground(java.awt.Color.blue);
	p.setVisible(true);

  }

}

will einfach ein fenster erstellen. die button sollen 10*10 groß sein. aber das blöde java will nicht so wie ich will. was ist da verkehrt?
aso: es soll nur swing benutzt werden. so ist meien vorgabe.
 

geissbock

Mitglied
noch mal zur erklärung:

ich will die button auf eine bestimmte größe bringen. aber das klappt nicht. die erstellung des fensters macje ich in einer naderen klasse. nicht das jemand denkt das es deshalb nicht funzt.
 

L-ectron-X

Gesperrter Benutzer
In Deinem Code legst Du ein zweidimensionales JButton-Array an. Also insgesamt 100 Buttons. Richtig?
Willst Du die optische Größe festlegen? Die optische Größe (in Pixel) eines JButtons wird anders eingestellt.
 
B

Beni

Gast
Du setzt ein LayoutManager...
Code:
p = new JPanel(new GridLayout(10,10,2,2));
... der die Darstellung übernimmt.

Wenn du die Grösse (und Position) von Hand setzen möchtest, benutzt du das sog. Null-Layout:
Code:
p = new JPanel( null );
...und dann JButton#setBounds benutzen.

mfg Beni

P.S.
aber das blöde java will nicht so wie ich will
:noe: :roll: :### ???:L :arrow: :D
 
G

Guest

Gast
Code:
public class Layout extends JPanel 
{
  private JButton[][] felder_links = new JButton[10][10];
  public Layout()
  {
    super();

    JPanel p;  
	add(p = new JPanel(null));

	for (int i=0;i<10;i++)
	{
		for (int j=0;j<10;j++)
		{
            felder_links[i][j] = new JButton();
            felder_links[i][j].setBackground(java.awt.Color.blue);
            felder_links[i][j].setBounds(i*20+5,j*20+100,20,20);
            p.add( felder_links[i][j] );
		}
	}
	p.setBackground(java.awt.Color.blue);

  }

}

So hab ich das jetzt (bin dazu verdammt, das mit dem Fan dieses 2.klassigen Fussballvereins zusammenmachen zu müssen :D )
Aber er zeigt nun gar keinen Button mehr an
ist doch alles verhext
 
B

Beni

Gast
Das hilft bereits:
Code:
public Layout()
  {
    super( new GridLayout(1, 1) );

Aber wieso eigentlich dieses zusätzliche Panel zwischen Layout und Buttons?

Wäre es nicht einfacher, die Buttons direkt auf dem Layout zu befestigen?

mfg Beni
 
G

Guest

Gast
weil da noch ein weiteres panel hinkommt
und bissel schrift drumherum
 
G

Guest

Gast
nun hab ich noch ne frage:

und zwar, wenn ich nen button aus der liste klicke, muss ich ja die events anwenden. kann ich rausfinden, das ich z.b. button[2][4] geklickt habe, also komme ich an die zahlen i=2, j=4 ?
 
G

Guest

Gast
mhh ich sollt mich mal anmelden, dann kann ich auch editieren :)

wenn ich an die zahlen komme, gilt das auch für den fall, das ich noch gar nicht geklickt habe sondern mich mit der maus nur über diesem button befinde?
 
B

Beni

Gast
Du kannst mit ActionEvent#getSource an den Button kommen. Oder du kannst JButton#setActionCommand( String id ) und ActionEvent#getActionCommand benutzen.

Und für die Maus kannst du ein MouseListener, bzw. MouseMotionListener verwenden (da gibt es Sachen wie "mouseEntered", "mouseExited", ... )
 

tie

Mitglied
Ich brauch immernoch hilfe:

Hier mal mein Quelltext:

Schiffeversenken.java
Code:
import javax.swing.*;

public class SchiffeVersenken
{
	public static void main( String args[] )
  	{
  		JFrame fenster = new JFrame("Fische verschenken");

  		Layout oberflaeche = new Layout();
  		fenster.getContentPane().add(oberflaeche);

        fenster.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		fenster.setSize(600,250);
		fenster.setResizable(false);
        fenster.show();
  	}
}

Layout.java
Code:
import javax.swing.*;

public class Layout extends JPanel
{
  private Spielfeld spielflaeche1, spielflaeche2;  
  
  private JButton[][] button_links = new JButton[10][10];
  private JButton[][] button_rechts = new JButton[10][10];
  
  private int[][] feld_links = new int[10][10];
  private int[][] feld_rechts = new int[10][10];
  
  public Layout()
  {
    super();
    this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));

	add(spielflaeche1 = new Spielfeld("User"));  
	add(spielflaeche2 = new Spielfeld("PC"));

	reset(spielflaeche1);
	reset(spielflaeche2);
	
  }
  
  public void reset(Spielfeld field)
  {
    for (int i=0;i<10;i++)
    {
    	for (int j=0;j<10;j++)
    	{
            field.getButtonfeld(i,j).setBackground(java.awt.Color.blue);
            field.setWertefeld(i,j,0);
        }
    }
  }

}

Spielfeld.java
Code:
import javax.swing.*;
import javax.swing.event.*;

public class Spielfeld extends JPanel implements MouseInputListener
{
	private JButton[][] buttonfeld = new JButton[10][10];
	private int[][] wertefeld = new int[10][10];
	
	Spielfeld(String user)
	{
        super(null);
        for (int i=0;i<10;i++)
        {
            for (int j=0;j<10;j++)
            {
                buttonfeld[i][j] = new JButton();
                buttonfeld[i][j].setBounds(i*20+10,j*20+10,20,20);
                
                add( buttonfeld[i][j] );
            }
        }
        JLabel ueberschrift = new JLabel("Statistik " + user);
        ueberschrift.setBounds(215,20,80,30);
        add(ueberschrift);
    }
    
    public JButton getButtonfeld(int i, int j)
    {
		return buttonfeld[i][j];
	}
	
	public int getWertefeld(int i, int j)
	{
		return wertefeld[i][j];
	}
	
	public void setWertefeld(int i, int j, int wert)
	{
		wertefeld[i][j]=wert;
	}

}

Setze ich den MouseInputListener in der Spielfeld.java richtig an? Ich möchte dort die Koordinaten auslesen wo ich mich befinde.

beim Kompilieren kommt immer:
Code:
.\Spielfeld.java:4: Spielfeld is not abstract and does not override abstract met
hod mouseReleased(java.awt.event.MouseEvent) in java.awt.event.MouseListener
public class Spielfeld extends JPanel implements MouseInputListener
       ^

Warum soll ich die Klasse abstract machen?

wenn ich sie abstract mache kommt immer:
Code:
.\Layout.java:18: Spielfeld is abstract; cannot be instantiated
        add(spielflaeche1 = new Spielfeld("User"));
                            ^
.\Layout.java:19: Spielfeld is abstract; cannot be instantiated
        add(spielflaeche2 = new Spielfeld("PC"));
                            ^
 
R

Roar

Gast
man muss alle methoden eines interfaces überschreiben. oder die klasse abstrakt machen. abstrakte klassen kann man nicht instantiieren. wie wärs mit ein bissl oop machholen?
 

tie

Mitglied
MouseInputListener funzt nun, jedoch nicht, wenn ein JButton vorliegt, wenn ich also mit der Maus über einem JButton bin wird keine Position registriert.
Liegt es daran das ich MouseEvent von awt nutze?

Code:
	public void mouseMoved(java.awt.event.MouseEvent e)
	{
		System.out.println(e.getX());
	}

Gibts es ein Pendent von swing?
 

tie

Mitglied
Wenn jemand auf die Idee kommen sollte, den Buttons auch nen MouseMotionListener zu geben - das hab ich schon gemacht. Resultat: Ich bekomme immer nur die relative Position auf dem jeweiligen Button ausgegeben, nicht aber die Position des Mauszeigers(Buttons) zum gesamten Spielfeld
 

tie

Mitglied
so weit klappt jetzt alle bis auf die tatsache, das ich einen observer eingebaut habe, dieser jedoch überhaupt keinen bock hat zu reagieren.

hier mal ein paar codestücke:
SchiffeControl.java (extends Observable)
Code:
	public void mouseClicked(MouseEvent e)
	{
		if ( e.getComponent() instanceof JButton )
		{
			// 3 Pixel Korrektur 
			x = e.getComponent().getLocationOnScreen().x + e.getX() - 3;
			y = e.getComponent().getLocationOnScreen().y + e.getY() - 3;
			
			System.out.println( "Benachrichtige Observer" );
			setChanged();
			notifyObservers( e );
		}
	}

Zeichnen.java (implements Observer)
Code:
	public void update( Observable o, Object obj )
  	{
    	System.out.println( "Nachricht empfangen" );
  	}

Layout.java
Code:
  	private SchiffeControl mouseControl = new SchiffeControl();
  	
  	private Zeichnen zeichnen = new Zeichnen(); 
....
                mouseControl.addObserver( zeichnen );

Es wird immer fleissig "Benachrichtige Observer" ausgegeben, jedoch nie "Nachricht empfangen". Was mache ich falsch?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M suche geeignetes Fenster zur Anzeige AWT, Swing, JavaFX & SWT 49
berserkerdq2 Kann ich ein Rechteck mittig im Fenster halten, egal wie ich die Bildschirmgröße verändere? AWT, Swing, JavaFX & SWT 3
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
TheSepp Fenster um x Pixel bewegen, wenn man auf dem Knopf drückt AWT, Swing, JavaFX & SWT 10
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
L Swing Files abspeichern mit Save as Dialog Fenster AWT, Swing, JavaFX & SWT 5
OZAN86 einfaches Fenster öffnen scheitert AWT, Swing, JavaFX & SWT 18
G Zuletzt aktives Fenster, vor dem aktuell aktiven AWT, Swing, JavaFX & SWT 2
sserio Kann man bei JavaFx ein Fenster aufkommen lassen? AWT, Swing, JavaFX & SWT 1
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
S Swing Alles beenden bei Fenster mit Scroll-Balken AWT, Swing, JavaFX & SWT 6
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
W Zweites/neues Fenster durch Button öffnen AWT, Swing, JavaFX & SWT 6
CptK Fokus auf geöffnetes Zweit-Fenster setzen und Eingaben außerhalb blocken AWT, Swing, JavaFX & SWT 2
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
MiMa JavaFX Fenster in JavaFX öffnen Schliessen (Initialisierung) AWT, Swing, JavaFX & SWT 20
N Kontextmenü (Popup-Fenster) erstellen AWT, Swing, JavaFX & SWT 3
L Hintergrundbild im Fenster darstellen AWT, Swing, JavaFX & SWT 9
P JavaFX Fenster wird nicht angezeigt (Mac) AWT, Swing, JavaFX & SWT 13
VPChief Buttons Reagieren erst wenn ich Fenster minimiere AWT, Swing, JavaFX & SWT 4
B JavaFX TextField Eingabe in neues Fenster übernehmen AWT, Swing, JavaFX & SWT 4
N Drag and Drop Fenster AWT, Swing, JavaFX & SWT 11
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
S Swing Bei start des Programmes kein Fenster zu sehen AWT, Swing, JavaFX & SWT 1
X Neues Fenster mit Button öffnen und bearbeiten AWT, Swing, JavaFX & SWT 4
platofan23 JAVAFX zweites Fenster öffnen AWT, Swing, JavaFX & SWT 2
M JavaFX Altes Fenster (FXML Datei) löschen AWT, Swing, JavaFX & SWT 16
P JavaFX Fenster lädt nicht mehr AWT, Swing, JavaFX & SWT 4
I AWT Listener während man in anderem Fenster ist AWT, Swing, JavaFX & SWT 4
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
D Swing Neues (3.) Fenster öffnen AWT, Swing, JavaFX & SWT 2
G JavaFX Fenster 1 Array übertragen zur Fenster 2 AWT, Swing, JavaFX & SWT 0
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
K Fenster welches den Sieger anzeigt AWT, Swing, JavaFX & SWT 5
O JavaFX Fenster scließen AWT, Swing, JavaFX & SWT 4
A Swing Fenster ändert Position bei Mausklick nicht AWT, Swing, JavaFX & SWT 2
S SWT neues Fenster, buttons aus alten etc... AWT, Swing, JavaFX & SWT 0
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
L Input aus Sub-Fenster Startfenster übergeben AWT, Swing, JavaFX & SWT 5
B AWT Fenster schließt nicht AWT, Swing, JavaFX & SWT 2
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
T Fenster schließen AWT, Swing, JavaFX & SWT 4
K JavaFX ObservableList + Fenster AWT, Swing, JavaFX & SWT 6
windl Transparentes / halbtransparentes Fenster AWT, Swing, JavaFX & SWT 1
K Fenster mittig im Vollbildschirm - ok, aber ... AWT, Swing, JavaFX & SWT 2
N Swing Sorry nicht mal ein Fenster öffnen... AWT, Swing, JavaFX & SWT 19
S actionlistener mit 2 fenster integrieren AWT, Swing, JavaFX & SWT 11
G Event Handling TableView daten in ein neues Fenster herauslesen? AWT, Swing, JavaFX & SWT 3
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
C Durch klicken von Button neues Fenster oeffnen AWT, Swing, JavaFX & SWT 18
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
J Button vergrößert sich bei Fenster resize AWT, Swing, JavaFX & SWT 22
L Zweites Fenster mit Thread AWT, Swing, JavaFX & SWT 0
Paul15 Zwei Fenster AWT, Swing, JavaFX & SWT 23
T LayoutManager Methode, um Bildschirm(fenster) für Aktualisierungen zu blockieren bzw. freizugeben gesucht AWT, Swing, JavaFX & SWT 2
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
L Daten in neuem Fenster AWT, Swing, JavaFX & SWT 2
D Mit Klick auf Button ein neues Fenster erzeugen AWT, Swing, JavaFX & SWT 11
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
A Swing Textübergabe innerhalb der Anwendung in unterschiedlichen Fenster AWT, Swing, JavaFX & SWT 8
wolfgang63 JavaFX Animation, Kreise im vorgegebem Takt durchs Fenster laufen lassen AWT, Swing, JavaFX & SWT 3
K Java Button öffnet neues Fenster AWT, Swing, JavaFX & SWT 5
Z Fenster leer, wenn ich ein JTextField erzeuge AWT, Swing, JavaFX & SWT 3
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
X Swing 2 Fenster (1 im Vordergrund) AWT, Swing, JavaFX & SWT 6
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
T JavaFX ControlsFX-Notification öffnet nicht wenn kein JavaFX-Fenster offen. AWT, Swing, JavaFX & SWT 1
E JavaFX JavaFX Fenster nicht schließen AWT, Swing, JavaFX & SWT 4
K JavaFX Fenster aufrufen über Menü AWT, Swing, JavaFX & SWT 1
thet1983 offne Fenster gemeinsam schließen AWT, Swing, JavaFX & SWT 8
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
Z JSlider im Modalen-Fenster AWT, Swing, JavaFX & SWT 0
Tort-E JavaFX Fenster nachladen AWT, Swing, JavaFX & SWT 1
V Fenster in einem Fenster anordnen AWT, Swing, JavaFX & SWT 7
I Zwei Fenster nebeneinander anzeigen AWT, Swing, JavaFX & SWT 2
U Fenster beim Vergörßern immer quadratsich AWT, Swing, JavaFX & SWT 7
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
E Alles in einem Fenster AWT, Swing, JavaFX & SWT 5
A Fenster erstellen AWT, Swing, JavaFX & SWT 2
I Swing Beim Fenster das kleine Symbol(ICS) ändern AWT, Swing, JavaFX & SWT 3
K JavaFX Vorschau Bereich/Fenster einer bestehenden Group AWT, Swing, JavaFX & SWT 3
G Scrollbar für das Fenster einfügen AWT, Swing, JavaFX & SWT 3
X Fenster von außen ansprechen AWT, Swing, JavaFX & SWT 7
brunothg Swing JTable -> AUTO_RESIZE_OFF aber das Fenster ausfüllen AWT, Swing, JavaFX & SWT 0
G jLabel aus anderem Fenster ändern AWT, Swing, JavaFX & SWT 7
G JavaFX Neues Fenster erstellen AWT, Swing, JavaFX & SWT 3
A SWT Fenster bei MouseOver vergrößern AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben