komisches Verhalten von ActionListener

anyname

Grünschnabel
ich habe ein mini Programm gestalltet.
kurze Beschreibung:

eine Frame mit BorderLayout versehen

Button in BorderLayout.NORTH
wenn man auf diesem Button Klickt, kommt der Inhalt in BorderLayout.CENTER, in diesem Fall eine einfache JLabel mit kurzem Text.
Alles läuft aber das problem liegt daran, dass wenn der FRAME mit der normalen Größe (400*400) ist, ist die JLabel nicht angezeigt, aber wenn man das Fenster des Programms vergrößert, dann sieht man die JLabel teilweise.

hier ist der Code:
Java:
package com.tutorial;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MainwithBorderlayout implements ActionListener{

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		final JFrame frame = new JFrame();
		frame.setLayout(new BorderLayout());
		final JButton bt = new JButton();
		bt.setText("click");
		JPanel paneltop = new JPanel();
		 JPanel panelcenter = new JPanel();
		JPanel panelleft = new JPanel();
 JLabel label1 = new JLabel("pressed");
 final JPanel panel2 = new JPanel();
 panel2.add(label1);

		paneltop.add(bt);
		panelleft.setBackground(Color.RED);
		panelcenter.setBackground(Color.BLUE);
		frame.add(paneltop,BorderLayout.NORTH);
		frame.add(panelleft, BorderLayout.WEST);
		frame.add(panelcenter, BorderLayout.CENTER);
		frame.setSize(400,400);
		frame.setVisible(true);
		bt.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
	            if(e.getSource() == bt){ 
		        frame.getContentPane().add(panel2, BorderLayout.CENTER);	
		        }
			}});
		
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
	}


}


hier das Fenester min normaler/originaler Größe (400*400) und der Button schon geklickt:

Unbenannt.jpg

und hier das vergrößerte Fenster:

Unbenannt2.jpg



was ist falsch?
 
Hi
Dein Problem ist das das Panel panelcenter deinen Text immer automatisch überschreibt und du somit den Text nie sehen wirst.
Hier wär mal mein ausgebesserter Code. Weiß auch nicht was du ActionListener implementierst aber wirst schon deine Gründe haben :D
Java:
public class MainwithBorderlayout{

		public static void main(String[] args) {
			// TODO Auto-generated method stub
			final JFrame frame = new JFrame();
			frame.setLayout(new BorderLayout());
			final JButton bt = new JButton();
			bt.setText("click");
			JPanel paneltop = new JPanel();
			final JPanel panelcenter = new JPanel();
			JPanel panelleft = new JPanel();
			JLabel label1 = new JLabel("pressed");
		        final JPanel panel2 = new JPanel();
	        panel2.add(label1);
            panel2.setBackground(Color.BLUE); // Hier wird für den Text auch ein blauer Hintergrund gesetzt

			paneltop.add(bt);
			panelleft.setBackground(Color.RED);
			panelcenter.setBackground(Color.BLUE);
			frame.add(paneltop,BorderLayout.NORTH);
			frame.add(panelleft, BorderLayout.WEST);
			frame.add(panelcenter, BorderLayout.CENTER);
			frame.setSize(400,400);
			frame.setVisible(true);
			bt.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			if(e.getSource() == bt){
			frame.remove(panelcenter); //Centerpanel removen damit der Text nicht mehr überschrieben wird
			frame.add(panel2, BorderLayout.CENTER); 
			frame.revalidate(); // JFrame validieren damit Änderungen angezeigt und Größe gesetzt wird 
			frame.repaint();    // JFrame neu zeichen
			}
			}});

			}
	}
Lg hendl
 
Zurück