JTextField mit JButton und ausklappendem JPanel

  • Themenstarter Themenstarter Guest2
  • Beginndatum Beginndatum
G

Guest2

Gast
Hallo,

mein Vorhaben wird ziemlich genau durch den Titel beschrieben.
Ich will eine JTextField so modifizieren, dass Sie so wie die "Searchbar" im Firefox
searchbar8ed6de85jpg.jpg
aussieht. Und wenn jemand auf den Button (die Lupe) klickt, soll ein JPanel ausklappen auf dem ich verschiedene Komponenten platzieren kann, der Benutzer etwas auswählen kann und dann das ganze wieder zuklappen kann.

Nun: wie realisiere ich das? Ich kenne mit mit Swing ein bisschen aus. Habe schon mal für einen JButton ein neues UI geschrieben. Aber wie ich das realisiere weiß ich überhaupt nicht. Und wie soll ich dann noch dieses ausklappbare JPanel drankleben?

Ich hoffe Ihr könnt mir da ein Wenig helfen!
Gruß,
Guest2
 
Zuletzt bearbeitet von einem Moderator:
Eigentlich soll es genau so und nicht anders aussehen ... 🙂

Aber eine JComboBox ist eine gute Idee! Vielleicht kann man im UI den Downbutton irgendwie überschreiben ... Naja, aber die wohl wichtigere Frage ist: wie bekomme ich in das Drop-Down-Feld mein eigenes JPanel rein?

Gruß,
Guest2
 
Nun, für den Anfang könntest du eine kombinierte Komponente (zB JPanel) nehmen mit einem Button und einem Textfeld. Wenn der Button geklickt wird, öffnest du unter ihm ein JPopupMenü mit diversen Aktionen.
Dann muss man über Listener (ggfs PopupMenuListener) es so steuern, dass der gedrückte Zustand von dem Button wieder weggeht, ... naja, und sicher noch vieles mehr 🙂
 
puh in SWT hab ich das schon mal gemacht aber in Swing mhmmmm...
Eventuell ein Higlighter setzen...
 
Hier mal ein Denkansatz... Musst halt noch hinbekommen dass der Text nicht ins Bild reinschreibt und dass das Bild beim Hover ausgewechselt wird...
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Shape;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.text.BadLocationException;
import javax.swing.text.Highlighter;
import javax.swing.text.JTextComponent;
import javax.swing.text.Highlighter.HighlightPainter;


public class JImageTextField extends JTextField {

	public JImageTextField(int columns) {
		super(columns);
		installHighlightPainter();
	}

	private void installHighlightPainter() {
		Highlighter highlighter = getHighlighter();
		System.out.println(highlighter);
		try {
			highlighter.addHighlight(0, 0, createHighlightPainter());
		} catch (BadLocationException ex) {
			assert false : "0:0 illegal?"; //$NON-NLS-1$
		}
	}

	protected HighlightPainter createHighlightPainter() {
		return new Highlighter.HighlightPainter() {

			final JLabel label = new JLabel("", SwingConstants.TRAILING);

			public void paint(Graphics g, int p0, int p1, Shape bounds,JTextComponent c) {
				label.setIcon(new ImageIcon(getClass().getResource("\\4c.png")));
				final Insets ins = c.getInsets();


				final Dimension pref = label.getPreferredSize();
				final int prHeight = pref.height;
				final int prWidth = pref.width;
				final int w = Math.min(c.getWidth() - ins.left - ins.right,
						prWidth);
				final int h = Math.min(c.getWidth() - ins.top - ins.bottom,
						prHeight);
				final int x = c.getWidth() - ins.right - w ;
				final int parentHeight = c.getHeight() - ins.top - ins.bottom;
				final int y = ins.top + (parentHeight - h) / 2;
				SwingUtilities.paintComponent(g, label, c, x, y, w, h);
			}
		};
	}

	public static void main(String[] args) {
		final JPanel contentPane = new JPanel(new BorderLayout(6, 6));
		final JImageTextField comp = new JImageTextField(3);
		comp.putClientProperty("emptyTextHint", "Name, Vorname");
		contentPane.add(comp);

		final JFrame f = new JFrame("Test Frame: JHintingTextField");
		f.setContentPane(contentPane);
		f.pack();
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		f.setVisible(true);
	}
}
 
Okay sowie oben klappt es nicht du musst ein JPanel machen und darauf ein JTextfeld mit einem JLabel welches das Icon beinhaltet dann noch die Borders aller Kompoinenten richtig setzen und das wars...
 
Auch wenn es vielleicht nicht mehr aktuell ist, bin ich gerade zufällig darüber gestolpert und erinnerte mich, dass es mal gesucht wurde:

Searchbar

Vielleicht kann es ja jemand noch brauchen.

Grüße,
ymene
 

Neue Themen


Zurück
Oben