Komischer Effekt bei Laf

Status
Nicht offen für weitere Antworten.

Sanix

Top Contributor
Hallo,
Ich habe bei meiner Anwendung das System Look and Feel festgelegt. Es gibt aber einen "komischen" Effekt.

strange_effect.png


Die Buttons die so eingedrückt und fett aussehen, sind Member der Klasse, die anderen werden im Konstruktor erstellt. Wieso ist das so? Das macht doch keinen Sinn.
 

Sanix

Top Contributor
Code:
public class ReplayViewer extends JFrame
{
	private final String current_version = "0.2";	//Current version
	private static final long serialVersionUID = -8625710221171276676L;
	
	private final JButton jbLoadReplays = 
		new JButton("Load replays...");
	private final JButton jbDownloadReplays = 
		new JButton("Download selected replays...");
	private final JButton jbCheckUpdate = 
		new JButton("Check for updates");
	private ReplayTableModel model;
	private final JButton jbOpenWarcraftDir = 
		new JButton("Open Warcraft directory");
	
	private DefaultListModel statusList = new DefaultListModel();
	private ConfigWriter config = new ConfigWriter("settings.cfg");
	private Version update;
	
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception
	{
		new ReplayViewer();
	}
	
	@SuppressWarnings("serial")
	public ReplayViewer() 
	{
		//Window settings
		setSize(800, 600);
		setTitle("Replay Viewer  V." + current_version);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//// Tabs
		JTabbedPane tabs = new JTabbedPane();
		setContentPane(tabs);
		JPanel replayView = new JPanel(new BorderLayout());
		tabs.addTab("Replays", replayView);
		tabs.addTab("Settings", new ConfigGUI(config));
		
		//// Header buttons
		JPanel header = new JPanel(new GridLayout(0, 2));
		// Open replay directory, check for updates
		//final JButton jbOpenWarcraftDir = new JButton("Open Warcraft directory");
		header.add(jbOpenWarcraftDir);
		header.add(jbCheckUpdate);
		// Load and Download
		header.add(jbLoadReplays);
		header.add(jbDownloadReplays);
		// Filter
		final JButton jbFilter = new JButton("Filter replays");
		final JTextField jtFilter = new JTextField();
		KeyListener kl = new KeyListener()
		{
			@Override
			public void keyPressed(KeyEvent e) {}
			@Override
			public void keyReleased(KeyEvent e) 
			{
				if(e.getKeyCode() == KeyEvent.VK_ENTER)
				{
					loadReplays(jtFilter.getText());
				}
			}

			@Override
			public void keyTyped(KeyEvent e) 
			{
			}
		};
		jtFilter.addKeyListener(kl);
		header.add(jtFilter);
		header.add(jbFilter);
		
		replayView.add(header, BorderLayout.NORTH);
		//Actionlistener
		ActionListener al = new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e) 
			{
				if(e.getActionCommand().equals("Load replays..."))
				{
					loadReplays();
				}
				else if(e.getActionCommand().equals("Download selected replays..."))
				{
					downloadReplays();
				}
				else if(e.getActionCommand().equals("Filter replays"))
				{
					loadReplays(jtFilter.getText());
				}
				else if(e.getActionCommand().equals("Open Warcraft directory"))
				{
					try
					{
						Desktop.getDesktop().open(new File(config.getValue("warcraft3_path")));
					}
					catch(Exception ex){};
				}
				else if(e.getActionCommand().equals("Check for updates"))
				{
					checkForUpdates();
				}
				else if(e.getActionCommand().equals("Download update"))
				{
					downloadUpdate();
				}
			}
		};
		//Add listeners to the buttons
		jbLoadReplays.addActionListener(al);
		jbDownloadReplays.addActionListener(al);
		jbFilter.addActionListener(al);
		jbCheckUpdate.addActionListener(al);
		jbOpenWarcraftDir.addActionListener(al);
 

diggaa1984

Top Contributor
seh da erstma nix von wegen setLookAndFeel .. hätte vielleicht gedacht, das sich das eventuell auf später erzeugte komponenten auswirkt, aber nicht auf das was vorher schon da war .. klingt blöd, aber würde passen von wegen klassenvariablen gehen vor konstruktor ^^
 

Ebenius

Top Contributor
Die Buttons die das "falsche" L&F haben wurden erzeugt, bevor das L&F gesetzt wurden. Dagegen hilft eine der beiden Maßnahmen:
  • Setze das L&F, bevor Du irgendwelche GUI-Instanzen aufbaust. Oder (sofern dies nicht möglich ist)
  • Aktualisiere Deinen Komponentenbaum, nachdem Du ihn fertig aufgebaut und das L&F gesetzt hast per SwingUtilities.updateComponentTreeUI(Component)*.

*Nur weil ich's oft schon gesehen habe, für alle die diese Methode gern für Unsinn missbrauchen: nur dafür ist diese Methode gedacht!

Grüße, Ebenius
 

diggaa1984

Top Contributor
wow hab ich ja richtig geraten :D ... wo stehtn das, dass das so ist, hab kurz mal in der api gewühlt, aber diesbezüglich nix gefunden
 

Ebenius

Top Contributor
diggaa1984 hat gesagt.:
wo stehtn das, dass das so ist, hab kurz mal in der api gewühlt, aber diesbezüglich nix gefunden

Hmm... Wo das steht weiß ich nicht. Aber irgendwo steht's sicher... Vielleicht in irgendem Sun-How-To? Aber es ist bestimmt so. :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JLabel mit ImageIcon, komischer Rahmen? AWT, Swing, JavaFX & SWT 2
M [J3D]komischer rootBG.removeChild Bug AWT, Swing, JavaFX & SWT 4
I JavaFX Hover-Effekt bei Button AWT, Swing, JavaFX & SWT 11
I JavaFX: "Hover" und "Transition"-Effekt onEntered/onExited AWT, Swing, JavaFX & SWT 0
L JavaFX Hover Effekt über das Parent Element AWT, Swing, JavaFX & SWT 4
J Teiltransparenter JFrame mit Blur-Effekt AWT, Swing, JavaFX & SWT 2
L JavaFX Custom control mit Hover Effekt AWT, Swing, JavaFX & SWT 2
G JavaFX Button gedrückt "Effekt" AWT, Swing, JavaFX & SWT 2
E Problem mit Mouseover-Effekt AWT, Swing, JavaFX & SWT 2
A LookAndFeel Rollover Effekt bei JTabbedPane deaktivieren (Nimbus) AWT, Swing, JavaFX & SWT 8
E Swing Tutorial Buch blättern Effekt gesucht AWT, Swing, JavaFX & SWT 2
Dit_ Buttons Mouse-Over Effekt AWT, Swing, JavaFX & SWT 8
V Mouseover-Effekt bei JButton abschalten? AWT, Swing, JavaFX & SWT 2
K L a y o u t-Testprogramm mit seltsamen Effekt AWT, Swing, JavaFX & SWT 7
R Wie geht dieser Effekt? AWT, Swing, JavaFX & SWT 15
C 3D-Effekt bei Buttons AWT, Swing, JavaFX & SWT 3
foobar 3D-Effekt AWT, Swing, JavaFX & SWT 3
T Seltsamer Effekt bei repaint() AWT, Swing, JavaFX & SWT 4
R JTextField - setBackground - kein Effekt AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben