JTextArea und Look&Feel

Status
Nicht offen für weitere Antworten.
C

Camino

Gast
Hallo,

ich hab für eine kleine Swing-Anwendung das Look&Feel auf Windows (com.sun.java.swing.plaf.windows.WindowsLookAndFeel) eingestellt und festgestellt, dass die Komponente JTextArea ein bisschen aus der Reihe tanzt. In einem Dialog ist mir aufgefallen, dass der Text, der in eine JTextArea eingegeben wird, nicht das Look wie die anderen Elemente übernommen hat, also andere Schriftart- und grösse. Die JTextArea habe ich in eine JScrollPane gesteckt. Wie kriege ich es hin, dass der Eingabetext für die JTextArea genauso aussieht, wie z.B. der in meinem JTextField im selben Dialog? Vielleicht ist das Problem ja bekannt und es gibt eine Lösung dafür.
 
G

Gast

Gast
Bau doch ein kleines Minimalbeispiel das das Problem zeigt. Am besten bestehend aus einer Klasse.
 
C

Camino

Gast
Hallo,

ich dachte zwar, dass ich das Problem ausreichend beschrieben hätte, aber meinetwegen, wenn ihr euch das nicht anders vorstellen könnt...

Code:
import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;


public class JTextAreaProblem extends JFrame {
	
	public JTextAreaProblem() {
		
		String plaf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
		
		try {
		      UIManager.setLookAndFeel(plaf);
		    } catch (Exception e) {
		      e.printStackTrace();
		    }
		
		setTitle("JTextAreaProblem");

		setSize(400, 200);

		setLocationRelativeTo(getParent());    
    
		JPanel hauptPanel = new JPanel();
		JPanel buttonPanel = new JPanel();
		
		JTextField textFeld1 = new JTextField(20);
		JTextField textFeld2 = new JTextField(40);
		JTextArea textArea = new JTextArea(50, 10);
		
		hauptPanel.add(textFeld2);
		hauptPanel.add(textArea);

		JButton button1 = new JButton("OK");
		JButton button2 = new JButton("Abbrechen");
		
		buttonPanel.add(button1);
		buttonPanel.add(button2);
		
		add(BorderLayout.NORTH, textFeld1);
		add(BorderLayout.CENTER, hauptPanel);
		add(BorderLayout.SOUTH, buttonPanel);
		    
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);    
	
	}

	public static void main(String[] args) {
		new JTextAreaProblem();
	}

}

Jetzt nochmal meine Frage: Warum haben die Textfelder die Schriftformatierung (Art und Grösse) vom zugewiesenen L&F übernommen, die TextArea aber nicht?

Camino
 
C

Camino

Gast
Ich hab mal die Schriftarten von TextField und TextArea ausgeben lassen:
javax.swing.plaf.FontUIResource[family=Tahoma,name=Tahoma,style=plain,size=11]
javax.swing.plaf.FontUIResource[family=Monospaced,name=Monospaced,style=plain,size=13]

Ist meine einzige Möglichkeit jetzt, die Schrift bei der TeaxtArea selbst "per Hand" zu setzen, oder gibt es eine andere (bessere) Möglichkeit? Und warum wird das L&F nicht auf die Schrift in der JTextArea angewandt?
 

Verjigorm

Top Contributor
Code:
      EventQueue.invokeLater(new Runnable()
      {

    	  @Override
    	  public void run() 
    	  {
    		  try {
    			  UIManager.setLookAndFeel(plaf);
    		  } catch (Exception e) {
    			  e.printStackTrace();
    		  }
    	  }
	    	  
      });
 
C

Camino

Gast
Hmm, dann klappt es zwar mit der Schriftformatierung in der JTextArea, aber die JButtons haben nicht das Aussehen des L&F, sondern wieder das alte eckige Aussehen. Auch ändert sich dadurch die Breite des 2. JTextFields.
 

Wildcard

Top Contributor
1. setz das look and feel als erstes (in main)
2. niemals das Windows Look and Feel direkt ansprechen, du nimmst dir die Plattform und VM Unabhängigkeit. Setze statt dessen das System Look and Feel.
 
C

Camino

Gast
Wildcard hat gesagt.:
2. niemals das Windows Look and Feel direkt ansprechen, du nimmst dir die Plattform und VM Unabhängigkeit. Setze statt dessen das System Look and Feel.
Das verstehe ich nicht ganz. Wenn nicht direkt ansprechen, dann wie indirekt? Was ist das "System Look And Feel" und wie setze ich das?
 

Verjigorm

Top Contributor
Code:
	private static void setNativeLookAndFeel()
	{
	  try {
	    UIManager.setLookAndFeel(
	      UIManager.getSystemLookAndFeelClassName() );
	  } catch(Exception e) { e.printStackTrace(); }
	}
 
C

Camino

Gast
OK, das L&F wird nun wie beschrieben in main gesetzt, was bewirkt, dass die JTextArea wieder mit der Schriftformatierung aus der Reihe tanzt und nicht die Schriftart des L&F benutzt. Daran alleine scheint es nicht gelegen zu haben. Hier nochmal den aktuellen Code:

Code:
import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;


public class JTextAreaProblem extends JFrame {
	
	public JTextAreaProblem() {
		
		setTitle("JTextAreaProblem");

		setSize(400, 200);

		setLocationRelativeTo(getParent()); 
		    
		JPanel hauptPanel = new JPanel();
		JPanel buttonPanel = new JPanel();
		
		JTextField textFeld1 = new JTextField(20);
		JTextField textFeld2 = new JTextField(40);
		JTextArea textArea = new JTextArea(50, 10);
		//textArea.setFont(textFeld2.getFont());
		
		System.out.println(textFeld2.getFont());
		System.out.println(textArea.getFont());
		
		hauptPanel.add(textFeld2);
		hauptPanel.add(textArea);

		JButton button1 = new JButton("OK");
		JButton button2 = new JButton("Abbrechen");
		
		buttonPanel.add(button1);
		buttonPanel.add(button2);
		
		add(BorderLayout.NORTH, textFeld1);
		add(BorderLayout.CENTER, hauptPanel);
		add(BorderLayout.SOUTH, buttonPanel);
		    
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);    
	
	}

	public static void main(String[] args) {
				
		
		try {
		       UIManager.setLookAndFeel(
		         UIManager.getSystemLookAndFeelClassName() );
		     } catch(Exception e) { e.printStackTrace(); } 
		
		
		new JTextAreaProblem();
	}

}
 
C

Camino

Gast
Verjigorm hat gesagt.:
Du hast das wichtigste vergessen:

EventQueue.invokeLater(...)

So?

Code:
...

public static void main(String[] args) {
		
		
		EventQueue.invokeLater(new Runnable()
	      {

	         @Override
	         public void run()
	         {
	            try {
	               UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
	            } catch (Exception e) {
	               e.printStackTrace();
	            }
	         }
	         
	         
	           
	      });
		
		
		new JTextAreaProblem();	
		
		
	}
...

Dann bekomme ich aber:
Exception in thread "main" java.lang.NullPointerException
 
G

Gast

Gast
Ne, das new JTextAreaProblem(); muss in die run() Methode.

Aber mal ne grundsätzliche Frage: Woher weisst du, dass das Windows L&F nicht STANDARDMÄßIG für den Text der JTextArea Monospace als Schriftart verwendet? Vielleicht ist das ja so gewollt?
 
C

Camino

Gast
Gast hat gesagt.:
Ne, das new JTextAreaProblem(); muss in die run() Methode.
Alles klar. Danke.

Gast hat gesagt.:
Aber mal ne grundsätzliche Frage: Woher weisst du, dass das Windows L&F nicht STANDARDMÄßIG für den Text der JTextArea Monospace als Schriftart verwendet? Vielleicht ist das ja so gewollt?
Ich weiss das garnicht. Das war ja eigentlich meine Frage bzw. mein Problem. Ich hätte halt gerne die gleiche Schriftart wie bei den JTextFields. Hab das halt nun so gelöst, dass ich mir für die JTextArea die Schriftart vom JTextField hole.
 
G

Gast

Gast
Ja würde das auch so lösen. Falls du das nur unter Windows so handhaben willst, musst du halt zuvor die aktuelle Plattform abfragen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Anderes Look'n'Feel = JTextArea doppelt so gross! AWT, Swing, JavaFX & SWT 13
T Swing Mehrere Ausgaben in JTextArea AWT, Swing, JavaFX & SWT 2
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
P JTextarea (in JScrollPane) zeigt nur die beiden letzten Einträge an? AWT, Swing, JavaFX & SWT 0
RedEagle Swing JTextArea ist leer AWT, Swing, JavaFX & SWT 13
E Warum wird Text im JTextArea erst am Programmende angezeigt ? AWT, Swing, JavaFX & SWT 1
E wie in JScrollPane auf JTextArea zugreifen AWT, Swing, JavaFX & SWT 12
K Swing 2 JTextArea parrallel scrollable AWT, Swing, JavaFX & SWT 16
Hatsi09 JTextArea Inhalt verlinken AWT, Swing, JavaFX & SWT 4
ralfb1105 jTextArea Scrollbar hinzufügen - mit Jigloo erstellt AWT, Swing, JavaFX & SWT 7
S Ausgabe in JTextArea AWT, Swing, JavaFX & SWT 13
H JTextArea - farbige Zeilen .. bitte um Vorschläge zur Implementierung AWT, Swing, JavaFX & SWT 1
F 2D-Grafik JTextArea drucken bringt mieses Ergebnis AWT, Swing, JavaFX & SWT 2
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
Bluedaishi JTextArea gefundene Zeile nach Oben Scrollen AWT, Swing, JavaFX & SWT 13
S JTextArea Text nach oben wandern lassen AWT, Swing, JavaFX & SWT 7
Bluedaishi JtextArea AWT, Swing, JavaFX & SWT 6
V JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird AWT, Swing, JavaFX & SWT 7
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
Bluedaishi JDialog modal und JTextArea AWT, Swing, JavaFX & SWT 4
F JTextarea Steuern ~ consolenanbindung AWT, Swing, JavaFX & SWT 5
F Event Handling JTextArea auf bestimmte Eingabe reagieren (Return-Taste) AWT, Swing, JavaFX & SWT 2
F JTextArea hat keinen Rahmen AWT, Swing, JavaFX & SWT 10
N JTextArea Events weiterleiten AWT, Swing, JavaFX & SWT 3
R JTextArea mit verschiedenen Textfarben AWT, Swing, JavaFX & SWT 6
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
HoloYoitsu jTextArea.setCaretPosition(); What am I doing wrong? AWT, Swing, JavaFX & SWT 0
S Zeilenumbruch jTextArea mit toString AWT, Swing, JavaFX & SWT 2
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
M JTextArea - Leertaste "sperren" AWT, Swing, JavaFX & SWT 1
S Inhalt der Java-Konsole in die JTextArea AWT, Swing, JavaFX & SWT 3
M Swing JTextArea mit ScrollBar AWT, Swing, JavaFX & SWT 9
S Swing Zahl der Zeilenumbrüche in einer JTextArea bestimmen AWT, Swing, JavaFX & SWT 1
F Swing Caret in JTextArea vergrößern AWT, Swing, JavaFX & SWT 2
D JTextArea auf KeyListener Command AWT, Swing, JavaFX & SWT 6
N JFrame änliches wie JTextArea? AWT, Swing, JavaFX & SWT 2
A Swing JTextArea - Multi-Line-Editing AWT, Swing, JavaFX & SWT 2
A Swing JTextArea aus anderer Klasse in realtime aktualisieren AWT, Swing, JavaFX & SWT 3
O JTextArea befüllen AWT, Swing, JavaFX & SWT 2
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
A Swing Einrücken mehrerer Zeilen per Tab in einem JTextPane/JTextArea AWT, Swing, JavaFX & SWT 3
T Swing Ausgabe aus ArrayList in Klasse1 in jTextArea in Klasse2 AWT, Swing, JavaFX & SWT 2
B JTextArea Größe an Container anpassen AWT, Swing, JavaFX & SWT 2
B Drucken der JTextArea AWT, Swing, JavaFX & SWT 4
M JTextArea Zeile hinzufügen AWT, Swing, JavaFX & SWT 4
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
P JPanel- Listener durch JTextArea aktivieren AWT, Swing, JavaFX & SWT 8
A JTextArea - Zeichenbegrenzung nach .txt Datei import AWT, Swing, JavaFX & SWT 6
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
Hoppelmann Swing Tasten in JTextArea blockieren AWT, Swing, JavaFX & SWT 2
S JTextArea Tastaturanschläge AWT, Swing, JavaFX & SWT 2
E Swing JTextArea in JFrame, wie nun WindowFocusListener implementieren? AWT, Swing, JavaFX & SWT 2
S Problem mit JButton und JTextArea AWT, Swing, JavaFX & SWT 2
J Swing Mitwachsende JTextArea+ JPanel AWT, Swing, JavaFX & SWT 4
P Swing JtextArea füllen mit setText AWT, Swing, JavaFX & SWT 7
M Probleme mit der Selektion einer JTextArea AWT, Swing, JavaFX & SWT 3
T Die Größe einer JTextArea an Ihren Parent JPanel anpassen. AWT, Swing, JavaFX & SWT 5
hdi Swing ListCellRenderer + JTextArea + LineWrap AWT, Swing, JavaFX & SWT 6
T ComponentOrientation in JTextArea AWT, Swing, JavaFX & SWT 3
H Hintergrundbild in jTextArea AWT, Swing, JavaFX & SWT 4
G Swing JTextArea mit fester Anzahl Spalten! AWT, Swing, JavaFX & SWT 10
G ein JTextArea in zwei JPanels AWT, Swing, JavaFX & SWT 2
L JTextArea mit JScrollPane AWT, Swing, JavaFX & SWT 7
padde479 Swing replace JTextArea funktioniert nicht AWT, Swing, JavaFX & SWT 2
L Zeilenumbrüche aus JTextArea MIT in Textdatei schreiben AWT, Swing, JavaFX & SWT 4
_dp jTextArea/jTextPanel Auto Höhe AWT, Swing, JavaFX & SWT 5
Ollek JTextArea - Feste Zeilenanzahl(8 Zeilen) AWT, Swing, JavaFX & SWT 3
S Swing JTextArea während der Laufzeit füllen AWT, Swing, JavaFX & SWT 5
Ollek Text in JTextField und JTextArea zur Laufzeit ändern AWT, Swing, JavaFX & SWT 6
P Datenelement anderer Klasse in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
P Scrollbar JTextArea AWT, Swing, JavaFX & SWT 23
M Swing Ausgabe in JTextArea verzögern AWT, Swing, JavaFX & SWT 7
T Swing jTextArea soll sich der Fenstergröße anpassen beim ziehen?? AWT, Swing, JavaFX & SWT 2
S System.out in JTextArea AWT, Swing, JavaFX & SWT 4
S Swing JTextArea - Bild auf/ab Tasten implementieren AWT, Swing, JavaFX & SWT 4
J JTextArea verschwindet bei resize vom JFrame AWT, Swing, JavaFX & SWT 2
VfL_Freak "setAccelerator/KeyStroke" bei JTextArea ? AWT, Swing, JavaFX & SWT 6
P Swing JTextArea - beim neuzeichnen bleibt manchmal weißer Kasten AWT, Swing, JavaFX & SWT 10
Dit_ JTextArea zu Zeile X scrollen AWT, Swing, JavaFX & SWT 4
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
B Wechsel JTextArea und JComponent AWT, Swing, JavaFX & SWT 9
M [erledigt] Bestimmte Zeile aus JTextArea löschen AWT, Swing, JavaFX & SWT 3
G Swing JTable und JTextArea synchronisieren AWT, Swing, JavaFX & SWT 2
C JLabel, JTextArea, JScrollPane. repaint(); ? AWT, Swing, JavaFX & SWT 6
M JTextArea AWT, Swing, JavaFX & SWT 2
E Swing JTextArea Alternative? AWT, Swing, JavaFX & SWT 5
A Swing JTextArea über Frame hinaus anzeigen? AWT, Swing, JavaFX & SWT 2
S JInternalFrame oder JTextArea neu laden AWT, Swing, JavaFX & SWT 2
N JTextArea.setLineWrap Bug? AWT, Swing, JavaFX & SWT 3
N Swing JTextArea/JScrollpane: JScrollbar position AWT, Swing, JavaFX & SWT 8
I JTextArea mit Copy Paste Funktion AWT, Swing, JavaFX & SWT 7
M Swing JTextArea größe anpassen & setBackground liefer Nullpointer AWT, Swing, JavaFX & SWT 4
Plastagen JTextArea CaretPosition Aktualisierung AWT, Swing, JavaFX & SWT 10
C JTextField und JTextArea - Verständnisproblem AWT, Swing, JavaFX & SWT 14
B Exceptions werfen und in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
F new Line in JTextarea AWT, Swing, JavaFX & SWT 15
X Problem bei JTextArea und Thread.sleep() AWT, Swing, JavaFX & SWT 8
J Beliebtes Problem: Scrollbar in JTextArea AWT, Swing, JavaFX & SWT 4
w0ddes Swing JTextArea auf JScrollPane - Autoscroll?! AWT, Swing, JavaFX & SWT 2
Developer_X Swing Java JTextArea auto scroll down AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben