L a y o u t-Testprogramm mit seltsamen Effekt

Status
Nicht offen für weitere Antworten.

Kaladial

Bekanntes Mitglied
Code:
package testapp;

import java.awt.BorderLayout;
import java.awt.Rectangle;

import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.Color;
import java.awt.Cursor;
import javax.swing.JLabel;
import java.awt.GridBagConstraints;
import javax.swing.JButton;
import java.awt.FlowLayout;
import javax.swing.JScrollPane;

public class BorderTest extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	public int mainframe_x=0;
	public int mainframe_y=0;
	private JPanel jPanelSouth = null;
	private JLabel jLabelS = null;
	private JButton jButtonLogin = null;
	private JButton jButtonLogout = null;
	private JPanel jPanelLogin = null;
	private JPanel jPanelNorth = null;
	private JScrollPane jScrollPaneEigenschaften = null;
	private JScrollPane jScrollPaneBild = null;
	private JLabel jLabelE = null;
	private JLabel jLabelW = null;
	private JButton jButton3 = null;
	/**
	 * This is the default constructor
	 */
	public BorderTest() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
		this.mainframe_x=this.getGraphicsConfiguration().getBounds().width;
		this.mainframe_y=this.getGraphicsConfiguration().getBounds().height;
		this.setBounds(new Rectangle(0, 0, this.mainframe_x, this.mainframe_y));
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJPanelSouth(), BorderLayout.SOUTH);
			jContentPane.add(getJPanelLogin(), BorderLayout.CENTER);
			jContentPane.add(getJPanelNorth(), BorderLayout.NORTH);
			jContentPane.add(getJScrollPaneBild(), BorderLayout.WEST);
			jContentPane.add(getJScrollPaneEigenschaften(), BorderLayout.EAST);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jPanelSouth	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanelSouth() {
		if (jPanelSouth == null) {
			jLabelS = new JLabel();
			jLabelS.setText("JLabel");
			jPanelSouth = new JPanel();
			jPanelSouth.setLayout(new GridBagLayout());
			jPanelSouth.setBackground(Color.green);
			jPanelSouth.add(jLabelS, new GridBagConstraints());
		}
		return jPanelSouth;
	}

	/**
	 * This method initializes jButtonLogin	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonLogin() {
		if (jButtonLogin == null) {
			jButtonLogin = new JButton();
			jButtonLogin.setText("LI");
			jButtonLogin.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					jScrollPaneBild.setVisible(false);
					jScrollPaneEigenschaften.setVisible(false);
					jPanelLogin.setVisible(true);
				}
			});
		}
		return jButtonLogin;
	}

	/**
	 * This method initializes jPanelNorth	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanelNorth() {
		if (jPanelNorth == null) {
			jPanelNorth = new JPanel();
			jPanelNorth.setLayout(new FlowLayout());
			jPanelNorth.add(getJButtonLogin(), null);
			jPanelNorth.add(getJButtonLogout(), null);
			jPanelNorth.add(getJButton3(), null);
		}
		return jPanelNorth;
	}

	/**
	 * This method initializes jScrollPaneEigenschaften	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPaneEigenschaften() {
		if (jScrollPaneEigenschaften == null) {
			jLabelE = new JLabel();
			float x_f=(this.getGraphicsConfiguration().getBounds().width)*(1.0f/4.0f);
			int x=Math.round(x_f);
			jLabelE.setPreferredSize(new Dimension(x, 1));

			jScrollPaneEigenschaften = new JScrollPane();
			jScrollPaneEigenschaften.setViewportView(jLabelE);
			jScrollPaneEigenschaften.setVisible(false);
		}
		return jScrollPaneEigenschaften;
	}

	/**
	 * This method initializes jScrollPaneBild	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPaneBild() {
		if (jScrollPaneBild == null) {
			System.out.println("test");
			jLabelW = new JLabel();
			float x_f=(this.getGraphicsConfiguration().getBounds().width)*(3.0f/4.0f);
			int x=Math.round(x_f);
			jLabelW.setPreferredSize(new Dimension(x, 1));
			jScrollPaneBild = new JScrollPane();
			jScrollPaneBild.setViewportView(jLabelW);
			jScrollPaneBild.setVisible(false);
		}
		return jScrollPaneBild;
	}

	/**
	 * This method initializes jButtonLogout	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonLogout() {
		if (jButtonLogout == null) {
			jButtonLogout = new JButton();
			jButtonLogout.setText("1");
			jButtonLogout.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					jScrollPaneBild.setVisible(true);
					jPanelLogin.setVisible(false);
				}
			});
		}
		return jButtonLogout;
	}

	/**
	 * This method initializes jPanelLogin	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanelLogin() {
		if (jPanelLogin == null) {
			jPanelLogin = new JPanel();
			jPanelLogin.setLayout(new GridBagLayout());
			jPanelLogin.setBackground(Color.yellow);
			jPanelLogin.setVisible(false);
		}
		return jPanelLogin;
	}

	/**
	 * This method initializes jButton3	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton3() {
		if (jButton3 == null) {
			jButton3 = new JButton();
			jButton3.setText("2");
			jButton3.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					jPanelLogin.setVisible(false);
					jScrollPaneEigenschaften.setVisible(true);
				}
			});
		}
		return jButton3;
	}

}  //  @jve:decl-index=0:visual-constraint="4,4"

hi

so hab hier nen programm geschrieben das mir bei meinem layout problem weiterhelfen soll..
leider ist bei dem programm ein kleines problem aufgetreten das ich so net versteh...

also folgender effekt:
Variante 1:
- ich starte das programm
- drücke den button LI
--> alles ok es wird das gelbe panel angezeigt

Variante 2:
- ich starte das programm
- drücke den button 1
--> nichts passiert

Variante 3:
- ich starte das programm
- drücke den button 2
--> nichts passiert

Variante 4:
- ich starte das programm
- drücke den button LI
- drücke den button 1
- drücke den button 2
--> Gelbe Feld ok -> Linke Feld ok -> Rechte Feld wird nicht angezeigt

Variante 5:
- ich starte das programm
- drücke den button LI
- drücke den button 2
- drücke den button LI
- drücke den button 1
- drücke den button 2
--> nur so werden alle angezeigt...

Wenn ich bei variante 2 und 3 jedoch das fenster runter klappe und wiederhoch werden meine scrollpanels angezeigt... also dachte ich es liegt viellicht am repaint und hab nach jedem buttondruck auch ein repaint der einzelnen panels eingebaut -> kein effekt...

wieso ist das so?
und was kann ich gegen tun?

thx Kala
 

Marco13

Top Contributor
Ohne den Code gelesen oder das Problem nachvollzogenzu haben: Wenn man components hinzufügt oder entfernt, sollte man
validate();
aufrufen...
 

Marco13

Top Contributor
Was soll denn das ganze setVisible(false)-Zeux da? Kein Mensch weiß, was dort bei welchem Button passieren soll, und offenbar hat (neben mir auch sonst) niemand Lust, dein ominöses, geheimnisvolles Programm als Blackbox mit drei Buttons anzusehen, und aus dem beobachteten Verhalten wildwüst-spekulativ auf irgendein möglicherweise gewünschtes Verhalten zu schließen.

Anders forumuliert: Es ist egal, ob du das Verhalten dieses Programmes "seltsam" findest, oder nicht. Es ist das, was du programmiert hast. Nicht mehr und nicht weniger.
 

Kaladial

Bekanntes Mitglied
jaja wie du meinst...
seltsam nur das du anscheinend nicht in der lage bist per copy and paste das programm zu nehmen und dann selbst zu schauen ... irgendwelche schlauen sprüche von sich geben zählt nicht als hilfe...

und für mich ist es nunmal seltsam das wenn ich nem programm sag: iniziallisier den kram versteck den kram und zeig ihn an wenn ich nen button drück

und dann bei raus kommt das er das nur bedingt macht... dann is das halt seltsam für mich ... aber naja is mir auch egal
 

Marco13

Top Contributor
Irgendwelchen Code zu posten und dann zu sagen, dass er sich seltsam verhält, zählt nicht als Frage.

Ich habe das Programm gestartet. Und die Buttons geklickt. Mal war der Hintergrund gelb, mal nicht, mal waren irgendwelche Ränder da, mal nicht - aber WAS dort passieren sollte, ist nicht klar - und nachzuvollziehen, welcher (fehlerhafte) Aufruf einer Kombination von setVisible(false) und setVisible(true) in diesem Programm das vorliegende Verhalten verursacht, ist deine Aufgabe.
 

Kaladial

Bekanntes Mitglied
genau das ist doch aber in den varianten beschrieben ...

ich habe detailiert beschrieben welche button ich gedrückt hab und was passiert ist...

was ich net geschrieben hab ist das
button LI = gelbes feld
button 1 = feld links
button 2 = feld rechts
darstellen soll aber sorry das hatte ich angenommen bekommt man nach 2 sec raus
 

Marco13

Top Contributor

Variante 1:
- ich starte das programm
- drücke den button LI
--> alles ok es wird das gelbe panel angezeigt

Toll.


Variante 2:
- ich starte das programm
- drücke den button 1
--> nichts passiert

Doch, wenn man noch ein validate() einfügt - meine erste Antwort!!!



Variante 3:
- ich starte das programm
- drücke den button 2
--> nichts passiert

Doch, wenn man noch ein validate() einfügt - meine erste Antwort!!!


Variante 4:
- ich starte das programm
- drücke den button LI
- drücke den button 1
- drücke den button 2

Es wird ausgeführt:
jScrollPaneBild.setVisible(false);
jScrollPaneEigenschaften.setVisible(false);
jPanelLogin.setVisible(true);
jScrollPaneBild.setVisible(true);
jPanelLogin.setVisible(false);
jPanelLogin.setVisible(false);
jScrollPaneEigenschaften.setVisible(true);

Am ende sollten demnach sichtbar sein:
jScrollPaneEigenschaften
jScrollPaneBild

--> Gelbe Feld ok -> Linke Feld ok -> Rechte Feld wird nicht angezeigt

Was heißt "ok"? Es ist nicht sichtbar, und das ist das, was durch die Befehlsfolge erreicht wird. Das Rechte Feld wird angezeigt, wenn man noch ein validate() einfügt - meine erste Antwort!!!


Variante 5:

Ach, mach's dir doch selbst....

Du solltest dir klar machen, WER hier Hilfe von WEM haben will, und dass Hilfsbereitschaft auch ihre Grenzen hat, wenn du die Hilfe (hilfreiche Hilfe) nicht annimst, und diejenigen, die dir helfen wollen, als die letzten Volltrottel darstellst. Der Name "Kaladial" steht vorerst auf meiner ignorier-Liste. Entfernt wird er höchstens, wenn du mir glaubhaft(!) versichern kannst, dass du diese beiden Links gelesen hast, und beherzigen wirst:

http://www.lugbz.org/documents/smart-questions_de.html
http://java.sun.com/docs/books/tutorial/uiswing/
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben