5

JLabel スタイルの JTextField が必要です (つまり、JLabel が必要ですが、テキストを選択できるようにしたいのです)。

JTextField value = new JTextField(valueText);
value.setEditable(false);
value.setBorder(BorderFactory.createEmptyBorder);
value.setForeground(UIManager.getColor("Label.foreground"));               
value.setFont(UIManager.getFont("Label.font"));
value.setBackground(UIManager.getBackground("Label.background"));
...

Windows と Mac で正常に動作します。

JLabel のような JTextField (Mac)

しかし、Ubuntu (GTKLookAndFeel) では次の結果が得られます。

JLabel のような JTextField (Ubuntu)

「By」は JTextField で、「Size」は JLabel です。

4

2 に答える 2

2

setBorder(null);GTK L&F のデフォルトBordersの in/came fromをリセットUIMananagerするか、この値をUIMananager直接に設定すると思いますJTextField

編集:

ここで FontUIResource について示したのと同じ方法で、BorderUIResource を変更する必要があります。

EDIT2:

ここに画像の説明を入力そして1.5秒でここに画像の説明を入力

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
import javax.swing.plaf.BorderUIResource;

public class SystemFontDisplayer extends JFrame {

    private static final long serialVersionUID = 1L;
    private JFrame frame = new JFrame("Nimbus UIDeafaults and Font");
    private javax.swing.Timer timer = null;
    private JTextField testTextField = new JTextField("testTextField");
    private JButton testButton = new JButton("testButton");

    public SystemFontDisplayer() {
        frame.setLayout(new GridLayout(4, 0, 20, 20));
        testTextField.setBorder(null);
        frame.add(testTextField);
        frame.add(testButton);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(200, 105);
        frame.pack();
        frame.setVisible(true);
        start();
    }

    private void start() {
        timer = new javax.swing.Timer(1500, updateCol());
        timer.setRepeats(false);
        timer.start();
    }

    public Action updateCol() {
        return new AbstractAction("text load action") {

            private static final long serialVersionUID = 1L;

            @Override
            public void actionPerformed(ActionEvent e) {
                Border border = new LineBorder(Color.red, 2);
                final BorderUIResource res = new BorderUIResource(border);
                UIManager.getLookAndFeelDefaults().put("TextField.border", new BorderUIResource(border));
                UIManager.getLookAndFeelDefaults().put("Button.border", new BorderUIResource(border));
                SwingUtilities.updateComponentTreeUI(frame);

                /*Border border = new LineBorder(Color.red, 2);
                try {
                LookAndFeel lnf = UIManager.getLookAndFeel().getClass().newInstance();
                final BorderUIResource res = new BorderUIResource(border);
                UIDefaults uiDefaults = lnf.getDefaults();
                uiDefaults.put("TextField.border", res);
                uiDefaults.put("Label.border", res);
                uiDefaults.put("Button.border", res);
                UIManager.getLookAndFeel().uninitialize();
                UIManager.setLookAndFeel(lnf);
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }
                UIDefaults defaults = UIManager.getDefaults();
                BorderUIResource res = new BorderUIResource(border);
                defaults.put("TextField.border", res);
                defaults.put("Label.border", res);
                defaults.put("Button.border", res);
                SwingUtilities.updateComponentTreeUI(frame);*/
            }
        };
    }

    public static void main(String arg[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                SystemFontDisplayer systemFontDisplayer = new SystemFontDisplayer();
            }
        });
    }
}
于 2012-05-17T11:48:57.017 に答える
1

最後に、JTextField の代わりに JEditorPane を使用して、期待どおりの結果を得ました。

JEditorPane value = new JEditorPane();
value.setText(valueText);
...  

GTK ルック アンド フィールでは、JTextField でカスタム背景を使用できないようです: http://bugs.sun.com/view_bug.do?bug_id=6531760

于 2012-05-18T08:11:15.373 に答える