Eigene Komponenten basteln

Status
Nicht offen für weitere Antworten.

Mark110

Bekanntes Mitglied
die frage ist wohl schlecht gestellt, wie man an der ironie erkennt :D aber ich kenne nur die fertigen komponenten die ich mti new erstelle. ich habe keine vorstellung wie ich sowas mit individuellen dingen machen kann?
 

The_S

Top Contributor
Nunja, da gibt es zum Einen die Methode eine eigene Komponente mit anderen Komponenten zu erweitern => z. B. eine eigene Klasse, die von JPanel erbt und mehrere andere Komponenten in sich zu einer großen Komponente zusammenfasst. Oder aber du zeichnest dir etwas komplett neues über die paintComponent-Methode selbst.
 

Mark110

Bekanntes Mitglied
Code:
import javax.swing.JFrame;
import javax.swing.JTextArea;


public class EigeneKom extends JTextArea{
	
	

}


class Test extends JFrame{
	
	
	
	
	public static void main(String[] args) {
		System.out.println("dd");
		Test t = new Test();
		t.setDefaultCloseOperation(EXIT_ON_CLOSE);
		t.setBounds(200,200,200,200);
		t.getContentPane().add(new EigeneKom());
		t.setVisible(true);
	}
}

und wie kann ich jetzt z.b. irgendwas individuelles rein machen?
 

The_S

Top Contributor
Einfach reinschreiben!? Ich glaub bei dir liegt ein grundsätzliches Verständnisproblem vor ;) . Evtl. sagst du uns mal, wie du jetzt z. B. deine JTextArea verändert haben möchtest (was einfaches, kleines für den Anfang) und wir/ich zeigen dir, wies geht.
 

Mark110

Bekanntes Mitglied
naja ist halt nen scheiss beispiel :D
mir fällt gerade nicht ein was so eine textarea noch machen können soll :D

aber sagen wir z.b. so eine dropdownliste wie würde ich sowas schrieben.

würde ich da ein jtextfield ableiten?
 
J

JALU

Gast
Ich habe das ganze mal gebastelt, aber ich weiß nicht ob sauber ist alle Konstruktoren neu zu erzeugen?
Vielleicht kann man das noch sauberer lösen.

Hier mein Code:

Code:
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextArea;
import javax.swing.text.Document;

public class JTextAreaWithMenu extends JTextArea implements MouseListener {
	private static final long serialVersionUID = 6872048458970699373L;
	
	private JPopupMenu popmen = new JPopupMenu(); 
	private JMenuItem menu1 = new JMenuItem( "Ausschneiden"); 
	private JMenuItem menu2 = new JMenuItem( "Kopieren"); 
	private JMenuItem menu3 = new JMenuItem( "Einfügen"); 
	private JMenuItem menu4 = new JMenuItem( "Löschen"); 
	private JMenuItem menu5 = new JMenuItem( "Alles Markieren"); 

	private ActionListener menuListener = new ActionListener() {
		public void actionPerformed(ActionEvent event) {
			if(event.getActionCommand().equals("Ausschneiden")) {
				try {
					Robot rob = new Robot(); 
					rob.keyPress( KeyEvent.VK_CONTROL ); 
					rob.keyPress( KeyEvent.VK_X );
					rob.keyRelease(KeyEvent.VK_CONTROL);
					rob.keyRelease(KeyEvent.VK_X);
				}
				catch(AWTException awtE){}
			} else if(event.getActionCommand().equals("Kopieren")) {
				try {
					Robot rob = new Robot(); 
					rob.keyPress( KeyEvent.VK_CONTROL ); 
					rob.keyPress( KeyEvent.VK_C );
					rob.keyRelease(KeyEvent.VK_CONTROL);
					rob.keyRelease(KeyEvent.VK_C);
				}
				catch(AWTException awtE){}
			} else if(event.getActionCommand().equals("Einfügen")) {
				try {
					Robot rob = new Robot(); 
					rob.keyPress( KeyEvent.VK_CONTROL ); 
					rob.keyPress( KeyEvent.VK_V );
					rob.keyRelease(KeyEvent.VK_CONTROL);
					rob.keyRelease(KeyEvent.VK_V);
				}
				catch(AWTException awtE){}
			} else if(event.getActionCommand().equals("Löschen")) {
				try {
					Robot rob = new Robot(); 
					rob.keyPress( KeyEvent.VK_DELETE ); 
					rob.keyRelease(KeyEvent.VK_DELETE);
				}
				catch(AWTException awtE){}
			} else if(event.getActionCommand().equals("Alles Markieren")) {
				try {
					Robot rob = new Robot(); 
					rob.keyPress( KeyEvent.VK_CONTROL ); 
					rob.keyPress( KeyEvent.VK_A );
					rob.keyRelease(KeyEvent.VK_CONTROL);
					rob.keyRelease(KeyEvent.VK_A);
				}
				catch(AWTException awtE){}
			}
		}
	};

	public JTextAreaWithMenu() {
		super();
		this.addMouseListener(this);
		setJPopupMenu();	
	}
	
	public JTextAreaWithMenu(Document doc) {
		super(doc);
		this.addMouseListener(this);
		setJPopupMenu();	
	}
	
	public JTextAreaWithMenu(Document doc, String text, int rows, int columns) {
		super(doc, text, rows, columns);
		this.addMouseListener(this);
		setJPopupMenu();	
	}
	
	public JTextAreaWithMenu(int rows, int columns) {
		super(rows, columns);
		this.addMouseListener(this);
		setJPopupMenu();	
	}
	
	public JTextAreaWithMenu(String text) {
		super(text);
		this.addMouseListener(this);
		setJPopupMenu();	
	}
	
	public JTextAreaWithMenu(String text, int rows, int columns) {
		super(text, rows, columns);
		this.addMouseListener(this);
		setJPopupMenu();	
	}
	
	
	private void setJPopupMenu() {
		menu1.addActionListener(menuListener);
		menu2.addActionListener(menuListener);
		menu3.addActionListener(menuListener);
		menu4.addActionListener(menuListener);
		menu5.addActionListener(menuListener);

		popmen.add( menu1 ); 
		popmen.add( menu2 ); 
		popmen.add( menu3 );
		popmen.add( menu4 );
		popmen.addSeparator();
		popmen.add( menu5 );
	}

	@Override
	public void mouseClicked(MouseEvent me) {
		if(me.getButton()==MouseEvent.BUTTON3) {
			popmen.show( this, me.getX(), me.getY() ); 
		}
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {}

	@Override
	public void mouseExited(MouseEvent arg0) {}

	@Override
	public void mousePressed(MouseEvent arg0) {}

	@Override
	public void mouseReleased(MouseEvent arg0) {}
}
 
S

SlaterB

Gast
wenn du in deinem Programm nur einige wenige der Konstruktoren brauchst,
dann kannst du die anderen weglassen, man kann sie eh nicht aufrufen, wenn nicht von dir neu definiert (keine normale Vererbung),

--------

die Aufrufe
this.addMouseListener(this);
setJPopupMenu();
könntest du erstens noch in eine Operation init() zusammenfassen statt sie immer beide aufzurufen
und zweitens solltest du einheitlich bei beiden this. schreiben oder bei gar keinem

-------

statt
> if(event.getActionCommand().equals("Ausschneiden")) {
geht wahrscheinlich auf
if(event.getSource() == menu1) {

-----

den Robot musst du vielleicht nicht pro Aktion neu erzeugen sondern kannst ihn längerfristig speichern,
in jedem Fall würde eine Zeile am Anfang der actionPerformed reichen,
auch das try/catch nicht 5x wiederholen, sondern nur einmal, das if/ else dann darin
 

The_S

Top Contributor
Den Robot brauchst du gar nicht, da die JTextArea die Methoden JTextArea#copy JTextArea#paste und JTextArea#cut bereitstellt ;) .
 
G

Guest

Gast
Und wie spreche ich die Klasse an? this funktioniert ja nicht, da der Code in dem ActionListener ist.
Muss ich am Anfang schreiben:

Code:
JTextArea jta=this;
 
G

Guest

Gast
Ok schlecht gestellte Frage :oops:

Das hier funktioniert nicht:

Code:
private ActionListener menuListener = new ActionListener() {
		public void actionPerformed(ActionEvent event) {
			try {
				Robot rob=new Robot();

				if(event.getSource() == cut) {
					this.cut(); //geht nicht
				}
				if(event.getSource() == copy) {
					rob.keyPress( KeyEvent.VK_CONTROL ); 
					rob.keyPress( KeyEvent.VK_C );
					rob.keyRelease(KeyEvent.VK_CONTROL);
					rob.keyRelease(KeyEvent.VK_C);
				}
				if(event.getSource() == paste) {
					rob.keyPress( KeyEvent.VK_CONTROL ); 
					rob.keyPress( KeyEvent.VK_V );
					rob.keyRelease(KeyEvent.VK_CONTROL);
					rob.keyRelease(KeyEvent.VK_V);
				}
				if(event.getSource() == delete) {
					rob.keyPress( KeyEvent.VK_DELETE ); 
					rob.keyRelease(KeyEvent.VK_DELETE);
				}
				if(event.getSource() == mark) {
					rob.keyPress( KeyEvent.VK_CONTROL ); 
					rob.keyPress( KeyEvent.VK_A );
					rob.keyRelease(KeyEvent.VK_CONTROL);
					rob.keyRelease(KeyEvent.VK_A);
				}
			}
			catch(AWTException awtE){}
		}
	};

Wie ist die Lösung?
 
G

Guest

Gast
Ok lösung von Verjigorm funktioniert, aber wie kann ich den da keine inneren Klasse verwenden?
 
G

Guest

Gast
Ich möchte ein Login Fenster basteln. Das ganze soll statisch sein und ein boolean liefern.

Jetzt habe ich wieder ein Problem mit dem ActionListener da ich von da kein return benutzen kann:

Code:
import java.awt.GridLayout;
import java.awt.Toolkit;
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.JTextField;

public class JLoginWindow {

	private static JFrame frame=new JFrame("Passwortabfrage");
	private static JLabel text=new JLabel("Passwort hier eingeben:");
	private static JTextField eingabe=new JTextField();
	private static JButton zugang=new JButton("Eingabe");

	public static void show(final String passwort) {

		frame.setSize(500,130);
		frame.setLocation(100,100);
		frame.setLayout(new GridLayout(3,1,5,5));

		ActionListener al = new ActionListener() {
			public void actionPerformed(ActionEvent actionEvent) {
				new Thread() { 
					@Override public void run() {
						zugang.setEnabled(false);
						
						if(text.getText().equals(passwort))
							return true; //geht nicht
						else {
							text.setText("");
							zugang.setEnabled(false);
							Thread.sleep(100);
							zugang.setEnabled(true);
							return false; //geht nicht
						}
					}
				}.start();
			}
		};
		eingabe.addActionListener(al);
		
		frame.add(text);
		frame.add(eingabe);
		frame.add(zugang);

		frame.setVisible(true);
	}
}
 
S

SlaterB

Gast
selbst wenn es einen Rückgabewert gäbe, brächte dir das nix,
denn du rufst die Operation ja nie auf, das macht der User wenn er irgendwo klickt,
wo sollte dann der Rückgabewert hinwandern?

anderseits gibts das schon, schau dir JOptionPane an

deine true/ false könntest du kurzfristig in einer Exemplarvariablen zwischenspeichern,
ach ne, anonyme innere Klasse + static Operation, du machst es ja besonders schwer,
na ich mag das nun nicht komplett erklären,
schaue dir JOptionPane an, das hilft evtl. schon weiter
 
G

Guest

Gast
JOptionPane hilft mir nicht weiter, da ich es nicht verstehe.
Gibts da vielleicht einen Link , wo's erkläert wird?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
T SWT eigene Komponenten AWT, Swing, JavaFX & SWT 2
S Eigene Komponenten AWT, Swing, JavaFX & SWT 2
M eigene GUI Bibliothek erstellen. AWT, Swing, JavaFX & SWT 10
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
H MouseAdapter Klasse nutzen wenn eigene Klasse bereits von anderer erbt AWT, Swing, JavaFX & SWT 13
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
L JavaFX Eigene Font benutzen AWT, Swing, JavaFX & SWT 6
B Notepad++ in die eigene GUI einbinden AWT, Swing, JavaFX & SWT 7
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
M Eigene Klasse mit Grafikobjekten schreiben AWT, Swing, JavaFX & SWT 4
S JavaFX Drehen um eigene Achse AWT, Swing, JavaFX & SWT 2
P X extends TreeView - eigene Methoden AWT, Swing, JavaFX & SWT 5
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
L Eigene Component anordnen AWT, Swing, JavaFX & SWT 7
L JavaFX Eigene JavaFX Controls anlegen AWT, Swing, JavaFX & SWT 1
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
G Event Handling Event Handling in eigene Klasse AWT, Swing, JavaFX & SWT 4
L Eigene JComponent in GridLayout AWT, Swing, JavaFX & SWT 9
A JavaFX Scene Builder eigene Klasse hinzufügen AWT, Swing, JavaFX & SWT 2
L Swing Wie programmiere ich eine eigene GUI? AWT, Swing, JavaFX & SWT 12
T Swing Eigene Konsole AWT, Swing, JavaFX & SWT 5
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M eigene horizontale Scrollbar AWT, Swing, JavaFX & SWT 1
J JavaFX Eigene ListCell Problem(Objekte werden doppelt angezeigt) AWT, Swing, JavaFX & SWT 1
C Swing MenuBar als eigene Klasse AWT, Swing, JavaFX & SWT 4
A Swing Eigene JComponent Scrollable AWT, Swing, JavaFX & SWT 6
Kenan89 3D Models aus anderen Spielen in eigene einfügen AWT, Swing, JavaFX & SWT 3
R SWT Eigene Events erstellen und werfen AWT, Swing, JavaFX & SWT 59
P Eigene CMD GUI zum Starten von JAR AWT, Swing, JavaFX & SWT 10
M Swing eigene Dialoge, aber wie genau? AWT, Swing, JavaFX & SWT 5
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
P Swing Alle Zeilen einer Spalte (jTable) zusammen zählen und in eine eigene Zeile das Ergebnis schreiben. AWT, Swing, JavaFX & SWT 7
K 3D-Grafik Eigene "Kamera" AWT, Swing, JavaFX & SWT 2
T eigene Klasse für Panel AWT, Swing, JavaFX & SWT 9
S Swing Eigene Komponente (JPanel) soll ChangeEvents verteilen AWT, Swing, JavaFX & SWT 12
alderwaran Swing XML editor plugin für eigene anwendung AWT, Swing, JavaFX & SWT 2
P Swing Eigene Komponente Entwickeln - erben von JComponent oder JPanel? AWT, Swing, JavaFX & SWT 5
B Eigene Methoden in TABs einfügen AWT, Swing, JavaFX & SWT 8
R eigene Methoden für Buttons? AWT, Swing, JavaFX & SWT 11
H Swing Eigene Komponente wird nur halb oder komisch angezeigt AWT, Swing, JavaFX & SWT 3
H Swing Eigene Komponente reagiert falsch auf mouseClicked() AWT, Swing, JavaFX & SWT 5
T Eigene JComponent AWT, Swing, JavaFX & SWT 4
L Eigene Design Oberfläche erstellen AWT, Swing, JavaFX & SWT 3
1 Eigene Component in JScrollBar + fixe Linien??? AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
A Eigene StatusBar AWT, Swing, JavaFX & SWT 2
1 Eigene JComponent mit MouseListener versehen AWT, Swing, JavaFX & SWT 10
S Eigene GUI Elemente erstellen AWT, Swing, JavaFX & SWT 6
D Eigene Methode soll Gerade zeichnen AWT, Swing, JavaFX & SWT 5
D Swing Eigene Komponente mit JSpinner AWT, Swing, JavaFX & SWT 4
MrMilti eigene Klasse in JTable ablegen AWT, Swing, JavaFX & SWT 12
R Swing JTable: Eigene Zeichnung im Header AWT, Swing, JavaFX & SWT 11
A Eigene Border für Buttons AWT, Swing, JavaFX & SWT 19
A Eigene Buttons AWT, Swing, JavaFX & SWT 20
C JTextPane HTML und eigene Tags AWT, Swing, JavaFX & SWT 10
S Eigene GUI (evt. Toolkit) AWT, Swing, JavaFX & SWT 10
M SWT: eigene Events AWT, Swing, JavaFX & SWT 9
& eigene Schriftart in JEditorpane AWT, Swing, JavaFX & SWT 2
T Eigene Fenster kreieren?zb. wie bei Winamp? AWT, Swing, JavaFX & SWT 9
D Eigene Component erstellen? AWT, Swing, JavaFX & SWT 4
F eigene Swing-Komponente. Drehregler AWT, Swing, JavaFX & SWT 4
M Eigene Klasse für mehrer JSplitPanes AWT, Swing, JavaFX & SWT 3
O Eigene GUI Objekte entwerfen? AWT, Swing, JavaFX & SWT 3
A Eigene, sich selbst zeichnende Component AWT, Swing, JavaFX & SWT 5
T Eigene erweiterte MouseEvents nutzen AWT, Swing, JavaFX & SWT 2
M In eigene JPanel Klasse zeichnen AWT, Swing, JavaFX & SWT 4
M CellEditor und CellRenderer für eigene Klasse AWT, Swing, JavaFX & SWT 4
M eigene ComponentUI und Serializable AWT, Swing, JavaFX & SWT 3
E Eigene Steuerelemente bauen AWT, Swing, JavaFX & SWT 3
H eigene paintComponent(Graphics) kommt mit rezise nicht klar AWT, Swing, JavaFX & SWT 6
G fullscreen GUI - eigene components? AWT, Swing, JavaFX & SWT 2
T 4 db tabellen in einem karteireiter eigene klasse für die me AWT, Swing, JavaFX & SWT 7
S SWT Für jede gui komponente eigene methode AWT, Swing, JavaFX & SWT 2
J Eigene Fehlermeldung in AWT erzeugen AWT, Swing, JavaFX & SWT 2
D eigene SwingKonsole. AWT, Swing, JavaFX & SWT 5
I Eigene JComboBox AWT, Swing, JavaFX & SWT 10
C UIDefaults für eigene Klasse anpassen AWT, Swing, JavaFX & SWT 3
C ISelectionProvider und eigene Selections AWT, Swing, JavaFX & SWT 2
M kann man auch eigene look and feels machen? AWT, Swing, JavaFX & SWT 2
L eigene Komponente, ActionEvent senden? AWT, Swing, JavaFX & SWT 3
E Beim Schließen des Fensters eigene Funktion aufrufen AWT, Swing, JavaFX & SWT 8
M JTable mit JCombobox eigene Auswahl pro Zeile ? AWT, Swing, JavaFX & SWT 3
T JFrame - eigene Titelleiste AWT, Swing, JavaFX & SWT 8
Y Eigene Komponente einfügen AWT, Swing, JavaFX & SWT 6
G Eigene Koponente erstellen AWT, Swing, JavaFX & SWT 3
G Eigene Componente in jScrollView einbetten AWT, Swing, JavaFX & SWT 6
T Eigene grafische Oberfläche AWT, Swing, JavaFX & SWT 7
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben