JButton mit JLabel verdecken?

Jens81

Gesperrter Benutzer
Hallo zusammen,

ist es möglich, einen Teil eines JButtons z.B. durch ein JLabel zu überdecken? Ich habe mal ein einfaches Testprogramm geschrieben, allerdings funktioniert es so nicht (das JLabel scheint immer unter dem JButton zu liegen). Der Button soll im nicht-sichtbaren Bereich (wenn es denn funktionieren würde) auch nicht aktivierbar sein.

Java:
public static void main(String[] args) {
		JFrame test = new JFrame();
		test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		test.setLayout(null);
		test.setResizable(false);
		test.setSize(300,400);
		
		JButton but = new JButton("Drück mich!");
		but.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Knopf gedrückt!");
			}
		});
		but.setBounds(60,160,160,40);
		test.add(but);
		
		JLabel abdeckung = new JLabel();
		abdeckung.setOpaque(true);
		abdeckung.setBackground(Color.BLACK);
		abdeckung.setBounds(70,120,100,100);
		test.add(abdeckung);	
		
		test.setVisible(true);
	}
 
T

Tomate_Salat

Gast
hmm dachte man könnte es mit [c]setComponentZOrder(comp, index);[/c] lösen, aber da füllt entweder das Label oder der Button alles aus (hab dann iwo gelesen, dass das eher für layerdPanes gedacht ist). Aber wofür brauchst du das?! Wenn der Button inaktiv oder nicht sichtbar sein soll, dann löse dass doch einfach mit [c]setVisible(false);[/c] oder [c]setEnabled(false);[/c]

Mit freundlichen Grüßen

Tomate_Salat
 

Jens81

Gesperrter Benutzer
Mit setComponentZOrder hatte ich es auch probiert, bin aber auch auf die von dir geschilderten Probleme gestoßen.

Ich will den Button ja nicht deaktivieren oder unsichtbar machen, sondern nur eine Ecke überdecken. Von daher helfen mir setVisible und setEnabled nicht.


Hintergrund: Ich habe eine JTable mit boolean-Werten (JCheckBoxen), die folgende Form haben muss:

Java:
    S1  S2  S3
Z1            |
Z2      ______|
Z3 ___|

Daher dachte ich mir, ich könnte den rechten, unteren Teil einfach mit nem JLabel verdecken. Nicht besondern schön, aber schnell & einfach (zumindest in der Theorie ;) )

Der Einfachheit halber daher das Beispiel mit dem JButton. Aber das scheint ja aufwendiger zu sein als gedacht...
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
mit nem GlassPane könnte man da sicherlich was machen, zumindestens das überdecken ließe sich irgendwie hinbekommen
Java:
	JFrame f = new JFrame();
	JButton button = new JButton("Drück mich!");
	JPanel p = new JPanel();
	p.add(button);
	f.getContentPane().add(p);
	final JPanel glass = (JPanel) f.getGlassPane();
	glass.setVisible(true);
	glass.add(new JLabel("LABEL"));
	f.pack();
	f.setVisible(true);
	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

vllt hilft dir das schon weiter bei google was in diese richtung zu finden..(ich bin der meinung, hier irgendwo hatte auch schon mal jmd sowas vor gehabt)
 

Jens81

Gesperrter Benutzer
Es muss schon die JTable sein. Mir würds ja auch langen die Ecke via TableCellRenderer grau darzustellen, habe aber das Problem, dass ich nicht weiß, wie man die JCheckBoxen "verstecken" könnte. Im TableModel sind diese ja nur für ganze Spalten zu definieren.. daher die JLabel-Idee

Edit: Die Zellen einzeln grau darzustellen funktioniert nun so, dass auch die JCheckBoxen verdeckt sind. Allerdings wäre ein großes Label, welches die gesamte Ecke überdeckt, optisch ansprechender :)
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Vielleicht reicht ja sowas in der Art aus:
Java:
import java.awt.Component;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

public class CheckTableRenderer extends JFrame {
	private JTable table;
	
	public CheckTableRenderer () {
		DefaultTableModel model = new DefaultTableModel(
				new Object[][] {{true, false, true}, {true, true, true}, {true, null, null}}, 
				new String[] {"S1", "S2", "S3"}); 
		table = new JTable(model) {
			public Class<?> getColumnClass(int column) {
				return Boolean.class;
			}
			
			public boolean isCellEditable(int row, int column) {
				return getValueAt(row, column)!=null;
			}
			
			public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
				if (getValueAt(row, column)==null)
					return null;
				return super.prepareRenderer(renderer, row, column);
			}
		};
		this.getContentPane().add(new JScrollPane(table));
	}
	
	public static void main(String[] args) {
		JFrame frame = new CheckTableRenderer();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 

Jens81

Gesperrter Benutzer
Hatte wohl zeitgleich meinen Beitrag editiert :)

Danke (trotzdem) für den Vorschlag. Meine Lösung sieht ähnlich aus, bzw. läuft auf das gleiche Ergebnis heraus. Der Vorteil eines überdeckenden Labels wäre, dass die Gitternetzlinien auch überdeckt wären.

So lange mir oder euch nichts "besseres" einfällt, muss das erstmal so reichen...
 

Firestorm87

Bekanntes Mitglied
Hab da was nettes in nem Oreily-Buch gefunden:
Java:
package de.tobiaskahl.neuesprojekt.client;

// OverlayTest.java
// A test of the OverlayLayout manger . . .
//
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.OverlayLayout;

public class OverlayTest extends JFrame {
	public class BasicWindowMonitor extends WindowAdapter {
		@Override
		public void windowClosing(WindowEvent e) {
			Window w = e.getWindow();
			w.setVisible(false);
			w.dispose();
			System.exit(0);
		}
	}

	public class GridPanel extends JPanel {
		@Override
		public void paint(Graphics g) {
			super.paint(g);
			int w = this.getSize().width;
			int h = this.getSize().height;
			System.out.println("w: " + w + " h: " + h);
			g.setColor(Color.red);
			g.drawRect(0, 0, w - 1, h - 1);
			g.drawLine(w / 2, 0, w / 2, h);
			g.drawLine(0, h / 2, w, h / 2);
		}
	}

	public class SimpleReporter implements ActionListener {
		public void actionPerformed(ActionEvent ae) {
			System.out.println(ae.getActionCommand());
		}
	}

	public static void main(String args[]) {
		float alignments[] = { 0.0f, 0.0f, 0.0f, 0.0f };
		if (args.length == 4) {
			for (int i = 0; i < 4; i++) {
				alignments[i] = Float.valueOf(args[i]).floatValue();
			}
		}
		OverlayTest ot = new OverlayTest(alignments);
		ot.setSize(500, 300);
		ot.setVisible(true);
	}

	/**
	 * @param alignments
	 */
	public OverlayTest(float[] alignments) {
		super("OverlayLayout Test");
		this.setSize(400, 200);
		this.addWindowListener(new BasicWindowMonitor());
		Container c = this.getContentPane();
		final JPanel p1 = new GridPanel();
		final OverlayLayout overlay = new OverlayLayout(p1);
		p1.setLayout(overlay);
		final JButton jb1 = new JButton("B1");
		final JButton jb2 = new JButton("Button 2");
		final JButton jb3 = new JButton("Another Button");
		SimpleReporter reporter = new SimpleReporter();
		jb1.addActionListener(reporter);
		jb2.addActionListener(reporter);
		jb3.addActionListener(reporter);
		p1.add(jb1);
		p1.add(jb2);
		p1.add(jb3);
		JPanel p2 = new JPanel();
		p2.setLayout(new GridLayout(1, 7));
		final JTextField x1 = new JTextField("0", 4); // Button1 x alignment
		final JTextField y1 = new JTextField("0", 4); // Button1 y alignment
		final JTextField x2 = new JTextField("0", 4);
		final JTextField y2 = new JTextField("0", 4);
		final JTextField x3 = new JTextField("0", 4);
		final JTextField y3 = new JTextField("0", 4);
		p2.add(x1);
		p2.add(y1);
		p2.add(x2);
		p2.add(y2);
		p2.add(x3);
		p2.add(y3);
		JButton updateButton = new JButton("Update");
		// Note that we expect real values in the text fields
		updateButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				jb1.setAlignmentX(Float.valueOf(x1.getText().trim()).floatValue());
				jb1.setAlignmentY(Float.valueOf(y1.getText().trim()).floatValue());
				jb2.setAlignmentX(Float.valueOf(x2.getText().trim()).floatValue());
				jb2.setAlignmentY(Float.valueOf(y2.getText().trim()).floatValue());
				jb3.setAlignmentX(Float.valueOf(x3.getText().trim()).floatValue());
				jb3.setAlignmentY(Float.valueOf(y3.getText().trim()).floatValue());
				overlay.invalidateLayout(p1);
				p1.doLayout();
			}
		});
		p2.add(updateButton);
		c.add(p1, BorderLayout.CENTER);
		c.add(p2, BorderLayout.SOUTH);
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
M Problem mit FlowLayout, JLabel und JButton AWT, Swing, JavaFX & SWT 4
S JButton in JLabel malen AWT, Swing, JavaFX & SWT 7
K Swing JButton über JLabel AWT, Swing, JavaFX & SWT 6
B Inhalt von JTextField durch Klick auf JButton in JLabel anzeigen lassen AWT, Swing, JavaFX & SWT 8
G jButton Text zu Integer umwandeln // jLabel mit Counter auf AWT, Swing, JavaFX & SWT 16
B JButton während der Laufzeit in JLabel umwandeln AWT, Swing, JavaFX & SWT 3
R JButton- und JLabel-Größe an Textgröße anpassen AWT, Swing, JavaFX & SWT 9
G JButton mit importFiles-Funktion auf JDrawPane AWT, Swing, JavaFX & SWT 5
B JButton Search AWT, Swing, JavaFX & SWT 8
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
N Erlennen ob JButton gedrückt ist AWT, Swing, JavaFX & SWT 6
D JButton Form verändern AWT, Swing, JavaFX & SWT 4
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Swing Kann man auf JButton zeichenen AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
ms_cikar Jbutton erzeugt neue Buttons AWT, Swing, JavaFX & SWT 2
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
A Swing JButton mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 6
F Swing Scrollbare Liste von JButton AWT, Swing, JavaFX & SWT 4
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
A Swing JButton aussehen AWT, Swing, JavaFX & SWT 12
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower Variable setzten mit JButton AWT, Swing, JavaFX & SWT 5
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
D JButton per Tastenkombi auswählen AWT, Swing, JavaFX & SWT 2
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
B JButton -> Rahmen wegbekommen AWT, Swing, JavaFX & SWT 7
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
M Textfarbe JButton verändern AWT, Swing, JavaFX & SWT 2
N JButton ausblenden AWT, Swing, JavaFX & SWT 2
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
C Swing JButton wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
stylegangsta MouseEvents aus JButton aufrufen AWT, Swing, JavaFX & SWT 3
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
M JButton - Listener AWT, Swing, JavaFX & SWT 1
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
L JButton - Größe anders als erwartet AWT, Swing, JavaFX & SWT 2
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
HoloYoitsu Swing JButton in verschiedenen Winkeln drehen AWT, Swing, JavaFX & SWT 0
J vocab1 = new JButton(""+voc1.get(nr).toString()+""); AWT, Swing, JavaFX & SWT 16
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
BRoll JButton Text nicht ausblenden ("...") AWT, Swing, JavaFX & SWT 2
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
J Swing JFrame slideout, wenn JButton gedrückt wurde AWT, Swing, JavaFX & SWT 0
S Swing Rückmeldung für JButton AWT, Swing, JavaFX & SWT 4
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
E JButton füllt ganzes JPanel auf AWT, Swing, JavaFX & SWT 6
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
W Swing JButton lässt sich nicht anzeigen AWT, Swing, JavaFX & SWT 8
Kandum Swing JButton - onclick -> Grafikfehler AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben