0

したがって、Nimbus LAF を使用するプログラムに JTextArea があります。機能上の問題があるため、JTextPane と交換する必要があります。

ただし、JTextArea にはデフォルトで塗りつぶされた境界線があります。JTextPane はそうではありません。JTextArea を JTextPane に設定するためのデフォルトの境界線がどれかわかりません。

getBorder() を試してみましたが、「javax.swing.plaf.synth.SynthBorder@455e3f91」しか返されませんでした

デフォルトの JTextBoreder を JTextPane に取得するにはどうすればよいですか?

4

2 に答える 2

2

Nimbus にこれらの* Painters と一緒に何か月も渡された後、私は勝利を収めました。

使用されるキーはオペレーティング システム間で変更される可能性があることに注意してください (そのため、保証はありませんが、私の場合は機能します)。国境の有効な鍵を持っている限り、JTextAreaそれを に転送できますJTextPane

import java.awt.Insets;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;


public class NimbusBorderPainting extends Box{

    public NimbusBorderPainting(){
        super(BoxLayout.Y_AXIS);
        try {
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (UnsupportedLookAndFeelException e2) {
            e2.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        //Retrieve the TextArea painter from the defaults 
        Object o = UIManager.get("TextArea[Enabled+NotInScrollPane].borderPainter");        

        //Transfer the Painter to a TextPane key
        UIDefaults paneDefaults = new UIDefaults();
        paneDefaults.put("TextPane.borderPainter",o);

        JTextPane pane = new JTextPane();
        pane.setMargin(new Insets(10, 10, 10, 10));

        //Apply the new UI to your text pane
        pane.putClientProperty("Nimbus.Overrides",paneDefaults);
        pane.putClientProperty("Nimbus.Overrides.InheritDefaults",false);
        pane.setText("Lots of Text\nWell, as much as I'm willing to type\n");
        add(pane);

    }

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(new NimbusBorderPainting());
        frame.validate();
        frame.pack();
        frame.setVisible(true);
    }

}
于 2012-10-11T20:18:23.347 に答える
2

私はあなたがこれを探していると思います:

UIManager.getDefaults().getBorder("TextArea.border");
于 2012-10-11T16:39:41.893 に答える