JLabel im Listener färben

A

ash34

Gast
Hallo,

sorry, aber ich habe eine Antwort über die SuFu wirklich nicht gefunden.

Also, ich erstelle ein JLabel und kann ihm via

Java:
label.setForeground(Color.WHITE)

auch ohne Probleme die Farbe weiß zuordnen. Was ich aber nicht kann, ist die Farbe beim draufklicken zu verändern...

Zur Info: Das Label liegt auf einem JPanel in einem JFrame. Am JPanel hängt ein MouseListener. Über diesen Listener und die Koordinaten des JPanels kann ich das JLabel problemlos identifizieren. Nur kann ich die Farbe durch einen erneuten aufruf von

Java:
label.setForeground(Color.YELLOW)

nicht gelb färben. Hat jemand einen Lösungsansatz? ???:L

Danke
 
A

ash34

Gast
Der MouseListener sollte am JLabel registriert sein. Wird die eine Zeile überhaupt ausgeführt? KSKB?

Ausgeführt wird alles. Wenn ich mir über die Standardausgabe die Farbe vor setForeground(..) ausgeben lasse erhalte ich erwartungsgemäß den Code für weiß, nach setForeground(..) erhalte ich den Code für gelb..

Ich denke also, dass die Änderung durchaus übernommen, aber nicht gezeichnet wird..
 

xehpuk

Top Contributor
KSKB (welches jedoch erwartungsgemäß funktioniert):
Java:
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class JLabelForeground {
	public static void main(final String... args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				final JFrame f = new JFrame();
				f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				final JLabel l = new JLabel("Lorem ipsum");
				l.setForeground(Color.WHITE);
				l.addMouseListener(new MouseAdapter() {
					@Override
					public void mouseClicked(MouseEvent e) {
						l.setForeground(Color.YELLOW);
					}
				});
				f.add(l);
				f.pack();
				f.setLocationRelativeTo(null);
				f.setVisible(true);
			}
		});
	}
}
Jetzt bist du dran mit einem nicht funktionierenden. ;)
 
A

ash34

Gast
Das mit dem Codebeispiel ist ein bisschen schwierig, weil meine Klassen relativ groß sind ;)

Was aber bei mir anders ist, ist das der Listener nicht am JLabel hängt, sondern am JPanel, auf dem das JLabel platziert ist. Könnte es daran liegen? (Ändern der Größe etc funktioniert einwandfrei. Auch Positionsänderungen werden umgesetzt)...

Aber weil du es so wolltest: :)

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;

import javax.swing.JLabel;
import javax.swing.border.LineBorder;

/**
 * 
 * @author florian	
 * 
 */

public class Box extends JLabel {
	
	private static final long serialVersionUID = -2804169159814223929L;
    private int width, height;
    private String title;
    private String data; // modifiable text (like 192.168.2.1...)
      
      /**
       * Constructor
       * @param width
       * @param height
       * @param x
       * @param y
       */
      
    public Box(int width, int height, int x, int y, String title, String data, Color color) {
    	
          this.width = width;
          this.height = height;
          this.title = title;
          this.data = data;
          this.setSize(new Dimension(width, height));
          this.setLocation(new Point(x,y));
          this.setPreferredSize(new Dimension(width,height));
          this.setFont(new Font("Dialog", 0, 10));
          this.setForeground(color);
          this.setBorder(new LineBorder(Color.BLACK, 100));
      }
     
     public int toBit(int width){
    	 int bit = 0;
    	 
    		switch(width){
			
			case 91: bit = 4; break;
			
			case 136: bit = 8; break;
			
			case 204: bit = 16; break;
			
			case 255: bit = 24; break;
			
			case 306: bit = 32; break;
			
			case 382: bit = 48; break;
			}		
    	return bit;
     }
      
//     public Rectangle getBounds() {
//          return bounds;
//      }
//     
//     public void setBounds(Rectangle r){
//    	 this.bounds = r;
//     }
     
     public String getData(){
   	  return this.data;
     }
      
     public void setData(String str){
    	  this.data = str;
      }
     
     public void paintComponent(Graphics g) {
    	
         Graphics2D g2 = (Graphics2D)g.create();
          if(data == null) data = "";
       
          g2.setColor(Color.BLACK);
          g2.drawRect((int)this.getLocation().getX(), (int)this.getLocation().getY(), width, height);
          g2.setColor(Color.WHITE);
          g2.fillRect((int)this.getLocation().getX(), (int)this.getLocation().getY(), width, height);
          g.setFont(this.getFont());
          g.drawString(title, (int)this.getLocation().getX()+2, (int)this.getLocation().getY()+11);
          g.drawString(data, (int)this.getLocation().getX()+8, (int)this.getLocation().getY()+33);
          g2.dispose();
  }
}

Java:
import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JPanel;

/**
 * 
 * BoxPanel contains all boxes that can be set out of the upper list of boxes in the frame
 * @author florian
 *
 */

public class BoxPanel extends JPanel{

	private static final long serialVersionUID = 1L;
	
		protected GUI gui;
		
		private List<Box> boxList;
	    private Color color;
	    
	    private final int standardWidth;
	    private final int standardHeight;
	    private final int fourBitWidth;
	    private final int eightBitWidth;
	    private final int sixteenBitWidth;
	    private final int twentyfourBitWidth;
	    private final int thirtytwoBitWidth;
	    private final int fourtyeightBitWidth;
        
	        /**
	         * Constructor
	         * 
	         */
	        
	public BoxPanel(GUI gui) {
		
		this.gui = gui;

	    boxList = new ArrayList<Box>();
	    
	    standardWidth = (int) gui.frameDim.getWidth()/15;
	    standardHeight = (int) gui.frameDim.getHeight()/19;
	    fourBitWidth = standardWidth;
	    eightBitWidth = (int) (fourBitWidth*1.5);
	    sixteenBitWidth = (int) (eightBitWidth*1.5);
	    twentyfourBitWidth = (int) ((sixteenBitWidth + eightBitWidth)*0.75);
	    thirtytwoBitWidth = (int) (sixteenBitWidth*1.5);
	    fourtyeightBitWidth = (int) ((thirtytwoBitWidth + sixteenBitWidth)*0.75);

	}
	               
	public void fillBoxPanel(){
	    	
		String[] boxText = {"Checksum","Code","Data","HdrLen","Hdr Checksum",
							"FOS","Identifier","Total Length",
							"Length/Type","Options","Pad","Packet ID",
							"Protocol","Präambel","SeqNumr",
							"SourAddr(Eth)","SourAddr(IP)","TarAddr(Eth)",
							"TarAddr(IP)","TOS","TTL","Type","Vers"};
		
	    	
		int n = 0;						// horizontal gap between boxes
		int m = 40; 					// vertical gap between boxes
		int rowCount = 12; 				// amount of boxes in one row 
		int x = 45;						// vertical gap for the first box (related to (0,0))
		int y = 5;						// horizontal gap for the first box (related to (0,0))
		int width = standardWidth;		// width of a normal box
		int height = standardHeight;	// height of a normal box
		this.color = Color.WHITE;		// color of a normal box

//		creating boxes, setting color and text to each of the boxes
	    		
		for(int i=0; i<boxText.length; i++){
	    			
			if(i < rowCount){					
				Box box = new Box(width, height, x+n, y, boxText[i], null, color);
				this.boxList.add(box);
				n = width*(i+1)+(i+1)*4;
	   			}
	    			
			if(i == rowCount){
	    		n=0;
	    		Box box = new Box(width, height, x+n, y+m, boxText[i], null, color);
	    		this.boxList.add(box);
	    		n = width*(i-11)+(i)*4;
	    		}
	    			
	    	if(i > rowCount){
	    		Box box = new Box(width, height, x+n, y+m, boxText[i], null, color);
	    		this.boxList.add(box);
	    		n = width*(i-11)+(i)*4;
	    		}
	    }
	}
	
	public int getStandardHeight(){
		return this.standardHeight;
	}
	        
	public List<Box> getBoxList(){
	  	return this.boxList;
	}
	
	public int getFourBitWidth(){
		return this.fourBitWidth;
	}
	
	public int getEightBitWidth(){
		return this.eightBitWidth;
	}
	
	public int getSixteenBitWidth(){
		return this.sixteenBitWidth;
	}
	
	public int getTwentyFourBitWidth(){
		return this.twentyfourBitWidth;
	}
	
	public int getThirtytwoBitWidth(){
		return this.thirtytwoBitWidth;
	}
	
	public int getFourtyeightBitWidth(){
		return this.fourtyeightBitWidth;
	}
	        
	public void paintComponent(Graphics g) {
	   super.paintComponent(g);
	    for (Box box: boxList)
	    	box.paintComponent(g);
	}
}

Java:
import java.awt.Color;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.List;

/*
 * Mouselistener belonging to the BoxPanel 
 * responsible for selecting a box out of the Panel and set its color yellow 
 */

public class BoxListener implements MouseListener {
	
	private GUI gui;
	private GridListener gridListener;
	private int newChosenBox;
	private int oldChosenBox;
	
	public BoxListener(GUI gui){
		
		this.gui = gui;
		newChosenBox = -1;
		
	}

	@Override
	public void mouseClicked(MouseEvent arg0) {
		
		oldChosenBox = newChosenBox;
		
		this.gridListener = gui.getGridListener();
		
		BoxPanel boxPanel = gui.getBoxPanel();
		List<Box> boxList = boxPanel.getBoxList();
		
		GridPanel gridPanel = gui.getGridPanel();
		List<Box> gridList = gridPanel.getGridList();
		
		for(int i=0; i<gridList.size(); i++){
			if(gridList.get(i).getForeground().equals(Color.YELLOW)){
				gridList.get(i).setForeground(Color.WHITE);
				gridListener.confirmBox(gridList.get(i));
				gridListener.resetToolbar();
			}	
		}
								
		for(int i=0; i<boxList.size(); i++){
			Point clickPoint = arg0.getPoint();
			Box box = boxList.get(i);
			if (contains(box,clickPoint)){
				newChosenBox = i;
			}
		}

		if(newChosenBox != -1){
			if(newChosenBox == oldChosenBox){
				if(boxList.get(newChosenBox).getForeground().equals(Color.YELLOW))
					boxList.get(newChosenBox).setForeground(Color.WHITE);
				else{
					boxList.get(newChosenBox).setForeground(Color.YELLOW);}
			}else{
				boxList.get(newChosenBox).setForeground(Color.YELLOW);
				System.out.println(boxList.get(newChosenBox).getForeground());
				boxList.get(newChosenBox).repaint();
				if(oldChosenBox != -1)
					boxList.get(oldChosenBox).setForeground(Color.WHITE);
				}
			}	
		boxPanel.repaint();
	}
	
	private boolean contains(Box box, Point clickPoint){
		boolean hit = false;
		
			if(clickPoint.getX() >= box.getX() && clickPoint.getX() <= box.getX()+box.getWidth())
				if(clickPoint.getY() >= box.getY() && clickPoint.getY() <= box.getY()+box.getWidth()){
					hit = true;
				}
			
		return hit;
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {}
	@Override
	public void mouseExited(MouseEvent arg0) {}
	@Override
	public void mousePressed(MouseEvent arg0) {}
	@Override
	public void mouseReleased(MouseEvent arg0) {}
	
	public int getChosenBox(){
		if(newChosenBox != -1){
			if(gui.getBoxPanel().getBoxList().get(newChosenBox).getForeground().equals(Color.YELLOW))
				return this.newChosenBox;
		}
		
		return -1;
	}	
}

Das Problem tritt im BoxListener auf..Zeile 62..dort änder ich die Farbe, aber es wird nicht übernommen...

EDIT: Also ich merke gerade, dass sich die Labels auch in der Größe nicht neu zeichnen, obwohl die Größe mit setSize() erfolgreich neu gesetzt wurde..
 
Zuletzt bearbeitet von einem Moderator:
A

ash34

Gast
Hier nochmal ein kleines Codebeispiel, was das Problem verdeutlicht. Label1 sollte nach einem Klick eigentlich rot werden...

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

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


public class TestClass {

	JLabel label;
	JLabel label2;
	
	public TestClass(){
		label = new JLabel();
		label2 = new JLabel();
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		TestClass test = new TestClass();
		test.doIt();
	
	}
	
	private void doIt(){
		BorderLayout border = new BorderLayout();
		JFrame frame = new JFrame();
		frame.setLayout(border);
		JPanel panel = new JPanel();

		label.setText("label1");
		label.setForeground(Color.WHITE);
		label2.setText("label2");
		label2.setForeground(Color.BLUE);
		panel.add(label);
		panel.add(label2);
		
		panel.addMouseListener(new MouseListener() {
			TestClass test = new TestClass();
			@Override
			public void mouseReleased(MouseEvent e) {}
			
			@Override
			public void mousePressed(MouseEvent e) {}
			
			@Override
			public void mouseExited(MouseEvent e) {}
			
			@Override
			public void mouseEntered(MouseEvent e) {}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				test.getLabel().setForeground(Color.RED);
				
			}
		});
		
		frame.add(panel, BorderLayout.CENTER);
		frame.setMinimumSize(new Dimension(200,300));
		frame.setVisible(true);
		frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	
	public JLabel getLabel(){
		return this.label;
	}
}
 

xehpuk

Top Contributor
In deinem ersten Codebeispiel (in der Tat ein wenig lang) wird
Code:
BoxListener
nirgendwo verwendet, daher lässt sich darüber nichts sagen.
In deinem zweiten Beispiel ist der Fehler klar zu sehen.
Im MouseListener erstellst du eine neue
Code:
TestClass
-Instanz …
[JAVA=47] TestClass test = new TestClass();[/code]
… und änderst die Farbe des Labels dieser neuen Instanz …
[JAVA=62] test.getLabel().setForeground(Color.RED);[/code]
… was sich natürlich nicht auf deine eigentliche
Code:
TestClass
-Instanz auswirkt.

Streich Zeile 47 und ändere Zeile 62 in …
[JAVA=62] getLabel().setForeground(Color.RED);[/code]
… oder …
[JAVA=62] TestClass.this.getLabel().setForeground(Color.RED);[/code]
… was wohl Geschmackssache ist.
 
A

ash34

Gast
Ohps..in dem Fall hast du natürlich recht ;)

Aber bei meinen Listener übergebe ich eigentlich alles im Konstruktor. Vielleicht der Vollständigkeit halber nochmal die Klasse GUI:

Java:
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.List;

/**
 * 
 * @author florian
 *
 * class which creates the frame with all buttons, textfields and panels
 * 
 */

public class GUI{
	
	static final int Hgap = 30;
	static final int textFieldSize = 30;
	final Dimension frameDim;
	final JFrame frame;
	
	private static BoxPanel boxPanel;
	private static GridPanel gridPanel;
	
	private static BoxListener boxListener;
	private static GridListener gridListener;
	
	private Container contentContainer;
	private JTextField textField;
	private JButton	checkButton; 
	private JButton exitButton;
	
	private JRadioButton four;
	private JRadioButton eight;
	private JRadioButton sixteen;
	private JRadioButton twenty4;
	private JRadioButton thirty2;
	private JRadioButton fourty8;
	
	
	public GUI(){
		
		Dimension dim = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());
		dim.setSize(dim.getWidth(), dim.getHeight() - 75);
		frameDim = dim;
		
		this.frame = new JFrame();

	}
	
	public static void main(String [] args){
	
		GUI gui = new GUI();
		
		GUI.boxPanel = new BoxPanel(gui);
		GUI.gridPanel = new GridPanel(gui);
		
		boxListener = new BoxListener(gui);
		gridListener = new GridListener(gui);
		
		gui.initializeGridPanel(gridPanel);
		gui.initializeBoxPanel(GUI.boxPanel);
		gui.createInputPanel();
		gui.paintFrame(GUI.boxPanel,GUI.gridPanel);
		
	}
	
	/*
	 * method to set the three inital starBoxes
	 */
	
	private void initializeGridPanel(GridPanel gridPanel){
		
		
		gridPanel.setStarBox(gridPanel.getFourBitWidth()/2, gridPanel.getStandardHeight(), 45, 140);
		gridPanel.setStarBox(gridPanel.getFourBitWidth()/2, gridPanel.getStandardHeight(), 45, 140+gridPanel.getStandardHeight()*2+10);
		gridPanel.setStarBox(gridPanel.getFourBitWidth()/2, gridPanel.getStandardHeight(), 45, 140+gridPanel.getStandardHeight()+5);
		gridPanel.addMouseListener(gridListener);
		
	}

	/*
	 * method to set the size of the BoxPanel and to fill it
	 */
	
	private void initializeBoxPanel(BoxPanel boxPanel){
		
		boxPanel.setPreferredSize(new Dimension((int)frameDim.getWidth(), (int)frameDim.getHeight()/8));
		boxPanel.fillBoxPanel();
		boxPanel.addMouseListener(boxListener);
		
	}
	
	/*
	 * method to fill the contentContainer and initialize all buttons
	 */
	
	private void createInputPanel(){
		
		FlowLayout flow = new FlowLayout();
		flow.setAlignment(FlowLayout.CENTER);
		flow.setHgap(GUI.Hgap);
		
		this.contentContainer = new Container(); // contains all buttons and the textfield
		this.contentContainer.setLayout(flow);
		
		this.textField = new JTextField();
		this.textField.setColumns(textFieldSize);
		this.textField.setText("INPUT");
		this.textField.setEditable(false);
				
//		initialize the checkButton
		
		this.checkButton = new JButton("CHECK");
		this.checkButton.setEnabled(false);
		this.checkButton.setName("check");
		
//		initialize the exitButton
		
		this.exitButton = new JButton("EXIT");
		this.exitButton.setEnabled(true);
		this.exitButton.setName("exit");
		
//		adding the ActionListener and KeyListener to each button
		
		this.exitButton.addActionListener(new ExitListener());
		this.exitButton.addKeyListener(new MyExitKeyListener());
		this.checkButton.addActionListener(new CheckListener());
		this.checkButton.addKeyListener(new MyCheckKeyListener());
		
//		initialize the radioButtons
		
		this.four = new JRadioButton("4");
		this.eight = new JRadioButton("8");
		this.sixteen = new JRadioButton("16");
		this.twenty4 = new JRadioButton("24");
		this.thirty2 = new JRadioButton("32");
		this.fourty8 = new JRadioButton("48");
		
		ButtonGroup radioGroup = new ButtonGroup();
		radioGroup.add(four);
		radioGroup.add(eight);
		radioGroup.add(sixteen);
		radioGroup.add(twenty4);
		radioGroup.add(thirty2);
		radioGroup.add(fourty8);
		
		this.four.setEnabled(false);
		this.eight.setEnabled(false);
		this.sixteen.setEnabled(false);
		this.twenty4.setEnabled(false);
		this.thirty2.setEnabled(false);
		this.fourty8.setEnabled(false);
		
//		fill the contentContainer
		
		contentContainer.add(textField);
		contentContainer.add(four);
		contentContainer.add(eight);
		contentContainer.add(sixteen);
		contentContainer.add(twenty4);
		contentContainer.add(thirty2);
		contentContainer.add(fourty8);
		contentContainer.add(checkButton);
		contentContainer.add(exitButton);
		
//		contentContainer.setSize(new Dimension((int) frameDim.getWidth(), (int) frameDim.getHeight()/10));
	}
	
	/**
	 * method to paint the frame
	 */
	
	private void paintFrame(BoxPanel boxPanel, JPanel gridPanel){
		 
		BorderLayout border = new BorderLayout();
		JScrollPane scrollbar = new JScrollPane(gridPanel);
		scrollbar.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		
		frame.setLayout(border);
		
		frame.add(boxPanel, BorderLayout.NORTH);
		frame.add(scrollbar, BorderLayout.CENTER);
		frame.add(contentContainer, BorderLayout.SOUTH);
		
		
		frame.setTitle("Echo Request Puzzle");
		frame.setSize(frameDim);		
		
		
		frame.setVisible(true);
		frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
		
		frame.addWindowListener(new MyWindowListener());
	}
	
	public Color getFrameColor(){
		return frame.getContentPane().getBackground();
	}
	
	public List<JRadioButton> getRadioButtons(){
		
		ArrayList<JRadioButton> list = new ArrayList<JRadioButton>();
		list.add(four);
		list.add(eight);
		list.add(sixteen);
		list.add(twenty4);
		list.add(thirty2);
		list.add(fourty8);
		
		return list;
	}
	
	public List<JButton> getButtons(){
		ArrayList<JButton> list = new ArrayList<JButton>();
		
		list.add(checkButton);
		list.add(exitButton);
		
		return list;
	}
	
	public BoxPanel getBoxPanel(){
		return GUI.boxPanel;
	}
	
	public GridPanel getGridPanel(){
		return GUI.gridPanel;
	}
	
	public JTextField getInputField(){
		return this.textField;
	}
	
	public BoxListener getBoxListener(){
		return GUI.boxListener;
	}
	
	public GridListener getGridListener(){
		return GUI.gridListener;
	}
}

In dieser Klasse wird das Fenster erstellt. Jeder Listener bekommt im Konstruktor dann das gleiche GUI Element übergeben.
Um eine Komponente neu zu zeichnen, muss ich doch
Code:
repaint()
auf die Komponente aufrufen, oder?

EDIT: Besonders wichtig sind hier vielleicht die Zeilen 63 bis 78 (die main)

noch ein EDIT:

Also nach klicken auf einer Box, ergibt sogar die Abfrage
Code:
getForeground().equals(Color.YELLOW)
in der Klasse BoxListener (Zeile 57) true...
Also wird das wirklich alles übernommen, nur nicht gezeichnet, oder irre ich mich?
 
Zuletzt bearbeitet von einem Moderator:

bERt0r

Top Contributor
Bitte wirf diese Box-Klasse in den Müll. Alles was du damit machst, geht mit einem normalen JLabel und evtl. einem Border schneller, kürzer, übersichtlicher und einfacher. Obendrein bleiben dir solche Fehler erspart. Das is ein typischer Fall von Komposition > Vererbung.
 
A

ash34

Gast
Bitte wirf diese Box-Klasse in den Müll. Alles was du damit machst, geht mit einem normalen JLabel und evtl. einem Border schneller, kürzer, übersichtlicher und einfacher.

Ok..ich vertraue dir jetzt einfach mal ;) Ich habe die Klasse jetzt nicht mehr in Benutzung. Das ändert aber an meinem Problem leider nichts... :bahnhof:
 
Zuletzt bearbeitet von einem Moderator:
A

ash34

Gast
Problem gelöst:

Bei jedem Aufruf der
Code:
getComponent
der jeweiligen JLabels muss die Farbe mit
Code:
label.getForeground
neu gesetzte werden. Anschlißend muss das gesamte Fenster über
Code:
frame.repaint()
neu gezeichnet werden.

Vielen Dank an alle :toll:

(insbesondere an die, die mich auf die Verworrenheit meines Codes aufmerksam gemacht haben)
 

bERt0r

Top Contributor
Das funktioniert so.
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
 
public class TestClassAsh {
 
    JLabel label;
    JLabel label2;
    
    public TestClassAsh(){
        label = new JLabel();
        label2 = new JLabel();
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        
        TestClassAsh test = new TestClassAsh();
        test.doIt();
    
    }
    
    private void doIt(){
        BorderLayout border = new BorderLayout();
        JFrame frame = new JFrame();
        frame.setLayout(border);
        JPanel panel = new JPanel();
 
        label.setText("label1");
        label.setForeground(Color.WHITE);
        label2.setText("label2");
        label2.setForeground(Color.BLUE);
        panel.add(label);
        panel.add(label2);
        
        panel.addMouseListener(new MouseListener() {
            @Override
            public void mouseReleased(MouseEvent e) {}
            
            @Override
            public void mousePressed(MouseEvent e) {}
            
            @Override
            public void mouseExited(MouseEvent e) {}
            
            @Override
            public void mouseEntered(MouseEvent e) {}
            
            @Override
            public void mouseClicked(MouseEvent e) {
                label.setForeground(Color.RED);
            }
        });
        
        frame.add(panel, BorderLayout.CENTER);
        frame.setMinimumSize(new Dimension(200,300));
        frame.setVisible(true);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JLabel Listener auf Textänderung? AWT, Swing, JavaFX & SWT 5
M Welcher Listener für JLabel? AWT, Swing, JavaFX & SWT 4
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
D JLabel übereinanderlegen AWT, Swing, JavaFX & SWT 5
E JLabel kopieren AWT, Swing, JavaFX & SWT 31
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
E JLabel AWT, Swing, JavaFX & SWT 1
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
I JLabel neue Zeile AWT, Swing, JavaFX & SWT 4
L JLabel ist verzerrt/größer als eingestellt AWT, Swing, JavaFX & SWT 15
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
E Wie kann ich ein JLabel auf größe der schriftlänge setzten? AWT, Swing, JavaFX & SWT 2
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L Kalendar als JLabel einfügen AWT, Swing, JavaFX & SWT 3
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
it_is_all jLabel.setText -> Char in Str: NullpointerException AWT, Swing, JavaFX & SWT 1
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
it_is_all JLabel.setIcon - funktioniert nicht mehr AWT, Swing, JavaFX & SWT 2
P Aktualisierung von jLabel in jFrames AWT, Swing, JavaFX & SWT 8
DaCrazyJavaExpert Swing JLabel Klickanimation AWT, Swing, JavaFX & SWT 4
A Swing JLabel als Parameter übergeben AWT, Swing, JavaFX & SWT 9
M JLabel ausrichten AWT, Swing, JavaFX & SWT 2
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
T JLabel Textinhalt von Oben anzeigen AWT, Swing, JavaFX & SWT 1
N JLabel in JTabbedPane verschieben AWT, Swing, JavaFX & SWT 2
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
OlafHD JLabel im JFrame Zentrieren AWT, Swing, JavaFX & SWT 2
T Event Handling JLabel als eigener Button AWT, Swing, JavaFX & SWT 7
T JLabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
F Abgeleitetes JLabel AWT, Swing, JavaFX & SWT 16
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
S jLabel HTML Formatierung AWT, Swing, JavaFX & SWT 2
J Statisches JLabel adden AWT, Swing, JavaFX & SWT 4
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
T JLabel in die Mitte(JLabel.CENTER geht nicht) AWT, Swing, JavaFX & SWT 12
2 JLabel - setText ändert den Text nicht AWT, Swing, JavaFX & SWT 4
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta JLabel anzuzeigenden Text zentrieren AWT, Swing, JavaFX & SWT 9
K Swing unterschied JTextField und JLabel AWT, Swing, JavaFX & SWT 7
F Swing JLabel in JFrame anpassen AWT, Swing, JavaFX & SWT 20
E JLabel aus Runnable ändern AWT, Swing, JavaFX & SWT 2
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
D JLabel bei Aufruf neue Zeile AWT, Swing, JavaFX & SWT 5
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
F ListCellRenderer mit JLabel und MouseListener AWT, Swing, JavaFX & SWT 4
F Swing JLabel wird nicht sofort Angezeigt AWT, Swing, JavaFX & SWT 3
D Timer für Bildfolge in einem jLabel AWT, Swing, JavaFX & SWT 5
S JLabel-Text in Methode setzen? AWT, Swing, JavaFX & SWT 2
GreyFox JLabel in laufender Anwendung erzeugen AWT, Swing, JavaFX & SWT 6
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
Z Auf ein JLabel drauf malen? AWT, Swing, JavaFX & SWT 1
S JLabel in den Vordergrund rücken AWT, Swing, JavaFX & SWT 1
A JLabel hochzählen lassen. AWT, Swing, JavaFX & SWT 6
S JLabel mit ImageIcon, komischer Rahmen? AWT, Swing, JavaFX & SWT 2
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
S JLabel anordnen AWT, Swing, JavaFX & SWT 2
J ungewollt-automatische Größenänderung von JLabel AWT, Swing, JavaFX & SWT 5
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
L 2D-Grafik PNG Datei in JLabel Array Problem AWT, Swing, JavaFX & SWT 4
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
B Swing JLabel und LayoutManager AWT, Swing, JavaFX & SWT 20
M Bild aus JLabel resizen und speichern AWT, Swing, JavaFX & SWT 0
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
O Statusleiste mit JLabel aktualisieren AWT, Swing, JavaFX & SWT 5
G jLabel aus anderem Fenster ändern AWT, Swing, JavaFX & SWT 7
T JLabel Nullpunkt verschieben AWT, Swing, JavaFX & SWT 6
F Swing JPanel mit JLabel spinnt? AWT, Swing, JavaFX & SWT 2
M Massenweise JLabel ? oder ? AWT, Swing, JavaFX & SWT 3
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
N JLabel HTML mit custom Font AWT, Swing, JavaFX & SWT 0
V JLabel bzw. GUI aus externen Thread ansteuern AWT, Swing, JavaFX & SWT 3
G JLabel verdeckt AWT, Swing, JavaFX & SWT 12
A JLabel zeichendicke einstellen AWT, Swing, JavaFX & SWT 3
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
S JLabel zeigt ImageIcon nicht AWT, Swing, JavaFX & SWT 13
S jLabel / jText beim starten ausblenden AWT, Swing, JavaFX & SWT 2
A Array von JLabel mit Grafiken anzeigen AWT, Swing, JavaFX & SWT 3
T Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen AWT, Swing, JavaFX & SWT 5
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
T Kreis in Jlabel darstellen. AWT, Swing, JavaFX & SWT 13
SexyPenny90 JLabel liegt unter meiner Turtle AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben