我有一个类延伸JPanel
,我想嵌入到JFrame
。 L & F设置为Nimbus,我用于面板的布局是GridBagLayout
。JTextArea上Nimbus跨不同机器
当我把JAR的朋友,一个JTextArea
我打算为日志控制台使用开始演戏了,也不会留我将它的大小。
textAreaLog.setMinimumSize(new Dimension(295, 48));
我使用的WinXP SP2和我的朋友使用的Win7 64位。下面是它的外观我的电脑(左)和他的PC(右)上的图片:
很显然,我想要它是我有我的机器上的方式。
下面是相关的代码(几乎用于面板全班同学):
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());
// Calls the method which initializes all the components
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.
*/
}
此外,这里的主要JFrame
类实例化LogPanel
,尽管注释。包括的也是JAR的下载链接。
我使用JPanel.setMinimumSize()
这样我就可以驯服JTextArea
不使用JScrollPane
。 我在想这个显示不一致与此有关。如果我确实使用JScrollPane
,它会完全混淆面板布局,所以我宁愿远离。
在此先感谢。
编辑1:
如果我改变将L & F到默认或系统L & F,I得到了同样的问题,我的朋友做;因此,这很可能与Nimbus本身有关。
编辑2:
原来有在JDK6, 我用其中,和JDK7之间雨云代码差异。我已经更新并用
setPreferredSize()
取代了 错误代码 - 现在它的功能很棒。
为了更快得到更好的帮助,请将[SSCCE](http://sscce.org/)(没有第三方API,文本代替图像,简称..)作为对问题的编辑。 – 2012-07-15 03:41:54
@Andrew事实证明,我使用的JDK6和JDK7之间的Nimbus代码存在差异。我已经更新并用'setPreferredSize()'替换了错误的代码,现在它工作的很好。 – Konstantin 2012-07-15 05:01:36
你应该考虑发表你的评论作为答案并接受它,这种方式很容易找到其他人有类似的问题:-) – kleopatra 2012-07-22 16:24:02