JTextArea on Nimbus being inconsistent across different machines
===

I have a class extending `JPanel` that I want to embed into a `JFrame`. The L&F is set to Nimbus, and the layout I'm using for the panel is a `GridBagLayout`.

----------

When I gave the JAR to a friend, a `JTextArea` I'm using as a log console started acting up and wouldn't stay the size I set it to.

`textAreaLog.setMinimumSize(new Dimension(295, 48));`

I'm using WinXP SP2, and my friend's using Win7 64-bit. Here's pictures of how it looks on my PC (left) and his PC (right):

[Image][1]

Obviously I intended it to be the way I have it on my machine.

----------

Here's the relevant code (almost the whole class used for the panel):

    package com.sassilization.mapfix.gui;
    
    // Imports the package with the inner-workings of the application
    import com.sassilization.mapfix.MapFixGenerator;

    import java.awt.*;
    import java.awt.event.*;

    import javax.swing.*;
    
    public class LogPanel extends JPanel {
    	private static final long serialVersionUID = 8324191587703173738L;
    
    	/**
    	* Constructor
    	*/
    	public LogPanel() {
    		setPreferredSize(new Dimension(350, 70));
    		// Creates a default Nimbus border
    		setBorder(BorderFactory.createTitledBorder((String) null));
    		setOpaque(false);
    		
    		setLayout(new GridBagLayout());
    		initComponents();
    	}
    	
    	/**
    	* Component declarations
    	*/
    	private JButton buttonFgd;
    	private JButton buttonHelp;
    	private JButton buttonLogCopy;
    	private JButton buttonLogDown;
    	private JButton buttonLogUp;
    	private JTextArea textAreaLog;
    	private JToggleButton toggleButtonAppend;
    	
    	/**
    	* Initializes and adds all the components to the panel
    	*/
    	private void initComponents() {
    		// The constraints used to lay out the components in a GBL
    		GridBagConstraints gbc = new GridBagConstraints();
    		
    		// The brick button
    		toggleButtonAppend = new JToggleButton(appendIcons[0]);
    		toggleButtonAppend.setBorder(BorderFactory.createEmptyBorder());
    		toggleButtonAppend.setToolTipText("Turn append mode on");
    		toggleButtonAppend.addItemListener(new ItemListener() {
    			public void itemStateChanged(ItemEvent event) {
    				buttonAppendItemStateChanged(event);
    			}
    		});
    		add(toggleButtonAppend, gbc);
    		
    		// The question mark button
    		buttonHelp = new JButton(new ImageIcon(getClass().getResource("resources/help.png")));
    		buttonHelp.setBorder(BorderFactory.createEmptyBorder());
    		buttonHelp.setToolTipText("Open help");
    		buttonHelp.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
    				// buttonHelpActionPerformed(event);
    			}
    		});
    		gbc.gridy = 1;
    		add(buttonHelp, gbc);
    		
    		// The white page button
    		buttonFgd = new JButton(new ImageIcon(getClass().getResource("resources/page_white_put.png")));
    		buttonFgd.setBorder(BorderFactory.createEmptyBorder());
    		buttonFgd.setToolTipText("Extract FGD file");
    		buttonFgd.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
    				// buttonFgdActionPerformed(event);
    			}
    		});
    		gbc.gridy = 2;
    		add(buttonFgd, gbc);
    		
    		// The problematic JTextArea
    		textAreaLog = new JTextArea();
    		textAreaLog.setMinimumSize(new Dimension(295, 48));
    		textAreaLog.setBorder(BorderFactory.createMatteBorder(0, 12, 0, 0,
    				new ImageIcon(getClass().getResource("resources/border.png"))));
    		textAreaLog.setBackground(new Color(0, 0, 0, 0));
    		textAreaLog.setForeground(new Color(171, 193, 207));
    		textAreaLog.setFont(new Font(null, Font.PLAIN, 9));
    		textAreaLog.setLineWrap(true);
    		textAreaLog.setWrapStyleWord(true);
    		textAreaLog.setEditable(false);
    		gbc.gridx = 1;
    		gbc.gridy = 0;
    		gbc.gridheight = 3;
    		add(textAreaLog, gbc);
    		
    		// The up arrow button
    		buttonLogUp = new JButton(new ImageIcon(getClass().getResource("resources/bullet_arrow_up.png")));
    		buttonLogUp.setBorder(BorderFactory.createEmptyBorder());
    		buttonLogUp.setContentAreaFilled(false);
    		buttonLogUp.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
    				// buttonLogUpActionPerformed(event);
    			}
    		});
    		gbc.gridx = 2;
    		gbc.gridheight = 1;
    		add(buttonLogUp, gbc);
    		
    		// The floppy disk button
    		buttonLogCopy = new JButton(new ImageIcon(getClass().getResource("resources/bullet_disk.png")));
    		buttonLogCopy.setBorder(BorderFactory.createEmptyBorder());
    		buttonLogCopy.setContentAreaFilled(false);
    		buttonLogCopy.setToolTipText("Copy log to clipboard");
    		buttonLogCopy.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
    				// buttonLogCopyActionPerformed(event);
    			}
    		});
    		gbc.gridy = 1;
    		add(buttonLogCopy, gbc);
    		
    		// The down arrow button
    		buttonLogDown = new JButton(new ImageIcon(getClass().getResource("resources/bullet_arrow_down.png")));
    		buttonLogDown.setBorder(BorderFactory.createEmptyBorder());
    		buttonLogDown.setContentAreaFilled(false);
    		buttonLogDown.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
    				// buttonLogDownActionPerformed(event);
    			}
    		});
    		gbc.gridy = 2;
    		add(buttonLogDown, gbc);
    	}
    	
    	private ImageIcon appendIcons[] = { new ImageIcon(getClass().getResource("resources/brick.png")),
    			new ImageIcon(getClass().getResource("resources/brick_add.png")) };
    	
    	/**
    	* Event listener methods for the components go here.
    	*/
    }

Furthermore, here's the main JFrame class which instantiates the `LogPanel`, albeit uncommented. Included is also a download link for the JAR.

[Link][2]

----------

I'm using `JPanel.setMinimumSize()` so I can tame the `JTextArea` without using a `JScrollPane`. *I'm thinking the display inconsistency has to do with this.* If I do use a `JScrollPane`, it messes up the panel layout completely, so I'd rather stay away.


Thanks in advance.


  [1]: https://dl.dropbox.com/u/17850283/parser_comparison.png
  [2]: https://privatepaste.com/5293d3d238