JLabel Komponente (ImageIcon) ausblenden?

Spaceman85

Mitglied
Weiss jemand wie ich von einem JLabel welches einen String besitzt und ich ein ImageIcon hinzugefügt habe, dieses später wieder ausblenden kann(setVisible()) so, dass das JLabel mit dem String noch eingbelendet wird?

ImageIcon pic = new ImageIcon("pic.gif");
JLAbel label = new JLAbel("Hallo");
label.setIcon(pic);

pic soll später nach belieben ein oder ausgeblendet werden!
 
Zuletzt bearbeitet:
Hallo

Versuch doch einfach ein neues Icon (eine Attrappe (falscher Pfad) ) dem JLabel zuzuweisen.
Code:
jLabel.setIcon("das Icon gibt es nicht");


In der API steht auch nichts gescheites! :mad:
 
Welche IDE? :suspekt:


PHP:
import java.awt.Container;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TestLabelIcon extends JFrame implements Runnable{

	private Container cp;
	private JLabel    jl_label;
	
	public TestLabelIcon() {

		ImageIcon ii_image = new ImageIcon("icon.png");
				  
		          jl_label = new JLabel("Text", ii_image, 0 );

		          cp = getContentPane();
		          cp.add(jl_label);
	}

	public static void main(String[] args) {
		TestLabelIcon fenster = new TestLabelIcon();
					  fenster.setTitle("Spaceman85");
					  fenster.setSize(400, 300);
					  fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					  fenster.setLocationRelativeTo(null);
					  fenster.setVisible(true);
					  
		Thread        thread = new Thread(fenster);
				      thread.run();
	}

	@Override
	public void run() {
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("Start");
			jl_label.setIcon(new ImageIcon("nichts"));
		System.out.println("Ende");
		
		System.out.println("Na, wo ist die Exception?");
	}
}

Nun aber schnell schlafen gehen! ;-)
 
Zuletzt bearbeitet:
Hmm, das bringt mich auch nicht viel weiter, da sich dan die grösse das Labels immer ändert!

Es muss irgendwie mit setVisible() funktionierten.
 
Mein Beispiel verwendet einen unpassenden LayautManager!

Stell deinen QuellCode hier rein und ich sage dir dann, an welcher Stelle du es abändern musst.
 
Zuletzt bearbeitet:
PHP:
package test;



import java.awt.*;

import javax.swing.*;

import javax.swing.border.TitledBorder;




public class Test extends JFrame {
		 int c;
		static int zug1;
		static int zug2;
		JTextField start = new JTextField(10);
		JTextArea area = new JTextArea(3,5);

		JButton diceBtn = new JButton("Würfeln");
		
		JLabel aktuellerPlayer = new JLabel();
		JLabel dice1;// = new JLabel();
		JLabel dice2;// = new JLabel();
		JTextArea playerList = new JTextArea(10,15);
		
		
		JLabel[] label = new JLabel[40];
		JLabel[] iconLabel = new JLabel[40];
		
		
		ImageIcon player1 = new ImageIcon("res/player1.png");
		ImageIcon player2 = new ImageIcon("res/player2.png");
		ImageIcon player3 = new ImageIcon("res/player3.png");
		ImageIcon player4 = new ImageIcon("res/player4.png");
		
		ImageIcon nichts = new ImageIcon("nichts.png");
		
		public Test(){
			super("Miniopoly");
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			
			
			dice1= new JLabel(new ImageIcon("res/dice1.gif"));
			dice2 = new JLabel(new ImageIcon("res/dice1.gif"));
			
			JPanel northPane = new JPanel();
			JPanel eastPane = new JPanel();
			JPanel southPane = new JPanel();
			JPanel westPane = new JPanel();
			JPanel center= new JPanel();
			
			northPane.setLayout(new GridLayout(1,20));
			eastPane.setLayout(new GridLayout(10,1));
			southPane.setLayout(new GridLayout(1,20));
			westPane.setLayout(new GridLayout(10,1));
	
			
			for (int i=0;i<label.length;i++){
				
				label[i]=new JLabel("Test");
				
			/*	label[i].setIcon(player1);
				label[i].setIcon(player2);
				label[i].setIcon(player3);
				label[i].setIcon(player4);
				*/
				
				iconLabel[i]= new JLabel(player1);
				iconLabel[i]= new JLabel(player2);
				iconLabel[i]= new JLabel(player3);
				iconLabel[i]= new JLabel(player4);
				
				label[i].setToolTipText("Test");
				label[i].setForeground(Color.black);
				label[i].setOpaque(true);
				iconLabel[i].setOpaque(true);
				
				if(i%2 ==0){
					label[i].setBackground(Color.green);
					iconLabel[i].setBackground(Color.green);
					if(i<10){
						northPane.add(label[i]);label[i].setIcon(nichts);
					northPane.add(iconLabel[i]);
					}else if(i<20){
						eastPane.add(label[i]);label[i].setIcon(nichts);
						eastPane.add(iconLabel[i]);
					}else if(i<30){
						southPane.add(label[i]);label[i].setIcon(nichts);
						southPane.add(iconLabel[i]);
					}else if(i<40)
						westPane.add(label[i]);label[i].setIcon(nichts);
			//		westPane.add(iconLabel[i]);
				}else if(i%2 !=0){
					label[i].setBackground(Color.GRAY);
					iconLabel[i].setBackground(Color.GRAY);
					if(i<10){
						northPane.add(label[i]);label[i].setIcon(nichts);
						northPane.add(iconLabel[i]);
					}else if(i<20){
						eastPane.add(label[i]);label[i].setIcon(nichts);
						eastPane.add(iconLabel[i]);
					}else if(i<30){
						southPane.add(label[i]);label[i].setIcon(nichts);
						southPane.add(iconLabel[i]);
					}else if(i<40)
						westPane.add(label[i]);label[i].setIcon(nichts);
					//	westPane.add(iconLabel[i]);
				}
			}
			
		
			
			playerList.setBorder(new TitledBorder("Spielerliste"));
			playerList.setBackground(Color.lightGray);
			playerList.setEditable(false);
			center.add(playerList);
			center.add(dice1);
			center.add(dice2);
			center.add(diceBtn);
			center.add(aktuellerPlayer);
			BorderLayout bord = new BorderLayout();
			setLayout(bord);
			add("North", northPane);
			
			add("East", eastPane);
			add("South", southPane);
			add("West", westPane);
			add("Center", center);
			setSize(850,750);
		//	pack();
			setVisible(true);
			
			
			
		}
		
			public static void main(String[] args){
				Test b = new Test();
			}
	
}

Habe ne andere möglichkeit gefunden einfach immer zwei JLabels nebeneinander!
Nun das problem welches ich aber auch schon vorher hatte, im Konstrukter in der for-Schleife wo die Labels angeordnet werden wenn ich die Kommentare beim westPane wegnehme verschieben sich alle Elemente im Konstrukter, das verstehe ich nicht!
 
Zuletzt bearbeitet:
OK, ist schon spät :rolleyes:

Ich habe aber eine Bombensichere Idee! Tausch das Icon mit einem gleichgroßen durchsichtigen Icon aus!
Achtung! PNG != GIF || JPG

Sonstiges:
Meine Lösung währ ein neues JLabel zu erzeugen ohne Icon und dieses anstatt des JLabels mit Icon zu Sätzen. Das JLabel ohne Icon erfragt die Masse vom JLabel mit Icon.
 
Zuletzt bearbeitet:
Mal wieder zu spät^^

Wie meinste das?
Wie bekomme ich den das Problem hin welches ich vorhin geschildert habe?

Ich verstehe nicht warum sich die ganze Ansicht ändert!
 
Zuletzt bearbeitet:
Hallo,

wenn du ein Icon von einem Label entfernen möchtest, musst du das Icon einfach auf null setzen.

Code:
label.setIcon(null);

Dann wird sich aber die Größe des Labels ändern. Dazu fragst du vorher die Größe ab, entfernst das Icon und setzt die PreferredSize.

MFG

Sascha
 

Neue Beiträge

Zurück