InnerFrame Select-Ebene verändern

Status
Nicht offen für weitere Antworten.

Kaladial

Bekanntes Mitglied
hi

ich hab nen array in dem mehrere innerframes gespeichert sind diese innerframes liegen ja auf verschiedenen ebenen also z.b.:

erstelltes innerframe 1 = ebene 1
erstelltes innerframe 2 = ebene 2
erstelltes innerframe 3 = ebene 3

wenn ich das eine inner frame über das andere zieh überlagern sich ja die teile und ich komme an das untere innerframe nicht mehr herran...

also nehmen wir mal an wenn ich über innerframe 1 innerframe 2 komplett drüber schieb so das nichts mehr von innerframe 1 hervorguckt, komme ich nicht mehr an innerframe 1 herran...

noch als info: meine innerframes sind durchsichtig und haben nur einen rahmen...
info2: ich habe die innerframes in einer liste aufgelistet und wenn ich über die liste das entsprechende frame anklick wird auch das richtige genommen...

nun meine frage: wie bekomm ich es hin das sich die eben ändern?
also wenn ich wie oben beschrieben innerframe2 über innerframe 1 liegt und ich über die tabelle innerframe1 anklick: wie bekomm ich es hin das sich dann da die ebenen verändern so das innerframe 1 nun über innerframe 2 liegt?

hab ich mich verständlich ausgedrückt ? wenn net einfach schreiben

mfg Kala
 

*Hendrik

Bekanntes Mitglied
Vorausgesetzt Du meinst JInternalFrame, dort gibt es die Methode
Code:
toFront();

Edit: Funktioniert auch bei JDialog
 

Kaladial

Bekanntes Mitglied
hmmm 2 probleme hab ich mit dem tofront()

1.) er holt es nicht komplett nach oben sondern so wie es scheint nur eine ebene pro aufruf... bei mehreren objekten z.b. 5 muss ich bei dem untersten 5 mal tofront aufrufen damit er ganz nach vorn kommt (so sieht das bei mir aus)

2.) die objekteben werden nur im vordergrund dargestellt aber kommen nicht wirklich in den vordergrund...

also z.b. ich hab 2 objekte (jinternalframes) die sich an einer ecke überlappen

obj 1 ist oben
obj 2 ist unten

wenn ich nun bei obj 2 die fläche anklick die nicht überlappt ist wird das komplette frame dargestellt
lasse ich nun wieder los ist es immer noch im vordergrund
wenn ich jetzt aber auf die überlappende ecke klicke bekomme ich obj1 obwohl obj2 im vordergrund angezeigt wird...

und das is halt etwas doof

mfg kala
 

Kaladial

Bekanntes Mitglied
so damit das ganze etwas klarer wird hab ich ma n paar bilder gemacht...

also auf bild 1 habe ich das linke 4eck angeklickt (diese grünliche farbe = select)

image72951.JPG


hier in dem fall wurde erst objekt links und dann objekt rechts erstellt und somit ist klar das linke ist im vordergrund
damit ist es auch kein problem das anzuklicken

bild2: hier hab ich das rechts objekt angeklickt wie ihr sehr wird es noch vom rechten überlagert (rand hab ich extra so groß gemacht damit man es besser sieht)

image72952.JPG



bild3: hier hab ich durch mehrfaches klicken auf das rechte objekt es zuminedestens in den vordergrund bekommen

image72953.JPG


problem hierbei: wenn ich auf blauen teil innerhalb des "grünen" 4ecks geh kann ich es anwählen
heist für mich das grüne 4eck ist zwar vollkommen sichtbar aber von der ebene immer noch unter dem blauen 4eck

ahja und um bild 3 hin zu bekommen is auch schwierig also es passiert nur sporadisch das er es ganz anzeigt
 
G

Guest

Gast
Dann probiers mal mit (evtl. in Kombination mit toFront()):
Code:
setSelected(true);
 

Kaladial

Bekanntes Mitglied
nee geht auch net...

also ich denk das es an meiner konstrutktion liegt (die aber so bleiben muss)...

also ich hab ja nen jlabel -> auf dem zeig ich ein internalFrame an -> auf dieses frame pack ich ein jlabel -> und auf dem jlabel liegen die mouselistener

-> das ganze (internalframe + jlabel + mouselistener) pack ich ein nen array von internalFrame

wenn ich jetzt ein mouseevent hab schau ich in meinem internalframe-array nach und setze das entsprechende internalFrame (internalFrameArray)...

aber wenn ich z.b. die größe oder die rahmenfarbe verändere geht das... also bin ich mir nicht sicher ob das daran liegt oder net...
 

Kaladial

Bekanntes Mitglied
hab hier mal zum rumprobieren n bissel was zusammen gebaut...
also fals wer ne idee hat kann der die testen...

einfach den code in ne datei einfügen also wenn du das programm startest haste rechts unten nen button

wenn du den drückst erzeugste nen label wie ich es auch hab und noch eins dann kommt nen 2. mit ner anderen farbe.... und da sieht man ganz gut was ich mein... is nur nen testprogramm also nich beschweren über schlechte programmierweise:

Code:
package testapp;

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

import javax.swing.BorderFactory;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

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 java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JScrollPane;
import javax.swing.border.BevelBorder;
import javax.swing.event.MouseInputAdapter;
import javax.swing.plaf.basic.BasicInternalFrameUI;
import javax.swing.border.TitledBorder;
import java.awt.Font;


public class BorderTest2 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 JButton jButtonCL = null;
	private JPanel jPanelLogin = null;
	private JPanel jPanelNorth = null;
	private JButton jButton3 = null;
	private JPanel jPanelE = null;
	private JLabel jLabelE = null;
	private JPanel jPanelStatus = null;
	public JTextArea jTextAreaStatus = null;
	private JScrollPane jScrollPaneEigenschaften = null;
	JInternalFrame labelarray[]= new JInternalFrame [500];
	private int deltaX, deltaY;
	private JScrollPane jScrollPaneW = null;
	private JLabel jLabelBild = null;
	public int i = 0;
	/**
	 * This is the default constructor
	 */
	public BorderTest2() {
		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, mainframe_x, mainframe_y));
		this.setBounds(new Rectangle(0, 0, 704, 557));
	}

	/**
	 * 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(getJPanelE(), BorderLayout.EAST);
			jContentPane.add(getJScrollPaneW(), BorderLayout.WEST);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jPanelSouth	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanelSouth() {
		if (jPanelSouth == null) {
			jLabelS = new JLabel();
			JLabel jLabelS2 = new JLabel();
			float x_f=(this.getGraphicsConfiguration().getBounds().width)*(1.0f/2.0f)-174;
			int x=Math.round(x_f);
			jLabelS.setPreferredSize(new Dimension(x, 100));
			jLabelS2.setPreferredSize(new Dimension(1, 10));
			jPanelSouth = new JPanel();
			jPanelSouth.setLayout(new BorderLayout());
			jPanelSouth.setBackground(Color.green);
			jPanelSouth.add(jLabelS, BorderLayout.WEST);
			jPanelSouth.add(jLabelS2, BorderLayout.NORTH);
			jPanelSouth.add(getJPanelStatus(), BorderLayout.CENTER);
			
		}
		return jPanelSouth;
	}

	/**
	 * This method initializes jPanelLogin	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanelStatus() {
		if (jPanelStatus == null) {
			jPanelStatus = new JPanel();
			jPanelStatus.setBackground(Color.green);
			jPanelStatus.setLayout(null);
			jPanelStatus.setBounds(new Rectangle(0, 0, 350, 100));
			jPanelStatus.add(getJTextAreaStatus(), null);
		}
		return jPanelStatus;
	}
	/**
	 * This method initializes jTextAreaStatus	
	 * 	
	 * @return javax.swing.JTextArea	
	 */
	private JTextArea getJTextAreaStatus() {
		if (jTextAreaStatus == null) {
			jTextAreaStatus = new JTextArea();
			jTextAreaStatus.setBounds(new Rectangle(0, 0, 350, 90));
			jTextAreaStatus.setEditable(false);
			jTextAreaStatus.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));

		}
		return jTextAreaStatus;
	}
	
	/**
	 * 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) {
					jScrollPaneW.setVisible(false);
					jPanelE.setVisible(false);
					jPanelLogin.setVisible(true);
					jTextAreaStatus.setText("li");
				}
			});
		}
		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 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) {
					jScrollPaneW.setVisible(true);
					jPanelLogin.setVisible(false);
					jTextAreaStatus.setText("1");
				}
			});
		}
		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);
					jPanelE.setVisible(true);
					jTextAreaStatus.setText("2");
				}
			});
		}
		return jButton3;
	}

	/**
	 * This method initializes jPanelE	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanelE() {
		if (jPanelE == 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));
			jPanelE = new JPanel();
			jPanelE.setLayout(new BorderLayout());
			jPanelE.setBackground(Color.blue);
			jPanelE.setVisible(true);
			jPanelE.add(jLabelE, BorderLayout.NORTH);
			jPanelE.add(getJScrollPaneEigenschaften(), BorderLayout.CENTER);
			jPanelE.add(getJButtonCL(),BorderLayout.SOUTH);
		}
		return jPanelE;
	}

	/**
	 * This method initializes jScrollPaneEigenschaften	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPaneEigenschaften() {
		if (jScrollPaneEigenschaften == null) {
			jScrollPaneEigenschaften = new JScrollPane();
			jScrollPaneEigenschaften.setBorder(BorderFactory.createLineBorder(Color.green, 5));
		}
		return jScrollPaneEigenschaften;
	}

	/**
	 * This method initializes jButton3	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonCL() {
		if (jButtonCL == null) {
			jButtonCL = new JButton();
			jButtonCL.setText("Create");
			jButtonCL.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					create_label();
				}
			});
		}
		return jButtonCL;
	}

	/**
	 * This method initializes jScrollPaneW	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPaneW() {
		if (jScrollPaneW == null) {
			jLabelBild = new JLabel();
			jLabelBild.setText("sgsdfgsdfgsdfgsdfgsdfgsdfgsdgsdfgsdgsdgfsdgfsdfg");
			jLabelBild.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.green, 5), "test", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51)));
			jLabelBild.setBounds(new Rectangle(0, 0, 353, 381));
			jScrollPaneW = new JScrollPane();
			jScrollPaneW.setViewportView(jLabelBild);
		}
		return jScrollPaneW;
	}

	public void create_label(){
		final JInternalFrame labelframe = new JInternalFrame(); 
        labelframe.setBounds(50, 50, 50, 50); 
        labelframe.setResizable(true); 
        labelframe.setVisible(true); 
        labelframe.setBackground(new Color(0.0f, 0.0f, 0.0f, 0.0f));
        ((BasicInternalFrameUI)labelframe.getUI()).setNorthPane(null); 
        //labelframe.setBorder(BorderFactory.createLineBorder(color, 2));
        if(i==0){
        	i++;
        	labelframe.setBorder(BorderFactory.createLineBorder(Color.green, 5));
        }else{
        	if(i==1){
        		i++;
        		labelframe.setBorder(BorderFactory.createLineBorder(Color.red, 5));
        	}else{
        		labelframe.setBorder(BorderFactory.createLineBorder(Color.blue, 5));
        	}
        }
        final JLabel label = new JLabel();
        for(int i=0; i<labelarray.length; i++){
        	if(labelarray[i]==null){
        		labelframe.setTitle(""+i);
        		labelarray[i] = labelframe;		
        		break;
        	}	        	
        }
        labelframe.add(label); 
        jLabelBild.add(labelframe); 
        jLabelBild.revalidate(); 
        jLabelBild.repaint(); 
        
        labelframe.addMouseListener(new java.awt.event.MouseListener() {
			public void mouseClicked(java.awt.event.MouseEvent e) {
			}
	        public void mousePressed(java.awt.event.MouseEvent e) {
	        }
	        public void mouseReleased(java.awt.event.MouseEvent e) {

	        }
			public void mouseEntered(java.awt.event.MouseEvent e) {
			}
			public void mouseExited(java.awt.event.MouseEvent e) {
			}		        
		});

        label.addMouseListener(new java.awt.event.MouseListener() {
			public void mouseClicked(java.awt.event.MouseEvent e) {
			}
			public void mousePressed(java.awt.event.MouseEvent e) {
				System.out.println(labelframe);
				System.out.println(labelframe.getTitle());
				labelframe.moveToFront();
				labelframe.repaint();
				labelframe.revalidate();
			}
			public void mouseReleased(java.awt.event.MouseEvent e) {
				labelframe.toFront();
			
			}
			public void mouseEntered(java.awt.event.MouseEvent e) {
			}
			public void mouseExited(java.awt.event.MouseEvent e) {
			}
		});

		MouseListener ml = new MouseInputAdapter() { 
            public void mousePressed(MouseEvent e) { 
                deltaX = e.getPoint().x; 
                deltaY = e.getPoint().y;
            } 
        }; 
        MouseMotionListener mml = new MouseInputAdapter() { 
            public void mouseDragged(MouseEvent e) { 
                labelframe.setLocation(labelframe.getLocation().x + e.getPoint().x - deltaX, 
                        labelframe.getLocation().y + e.getPoint().y - deltaY); 
				jLabelBild.repaint(); 
            } 
        }; 
        label.addMouseListener(ml); 
        label.addMouseMotionListener(mml);
        
	}	
}  //  @jve:decl-index=0:visual-constraint="4,12"
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben