インセットを保存するJButton JavaでのSwingの変更境界線の色

ME:

私は、JavaのSwingでJButtonコンポーネントの境界線の色を変更したいです。

私は次のことを試してみました:

package com.example.test;

import java.awt.Color;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test extends JFrame {

    public Test() {

        JPanel panel = new JPanel();
        JButton button1 = new JButton("Test Button 1");
        JButton button2 = new JButton("Test Button 2");
        button2.setBorder(BorderFactory.createLineBorder(Color.RED));

        panel.add(button1);
        panel.add(button2);

        this.add(panel);


        setSize(400, 400);
        setVisible(true);

    }

    public static void main(String[] args) {

        try {
            UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName() );
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnsupportedLookAndFeelException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        }
        Test t = new Test();
    }
}

これは、ボタン2のコンポーネントに私は境界線の色を変更しようとするが、それは詰め物を削除し、2つのボタンが生成されます。標準のJButtonのオリジナルのインセットを保存し、ちょうど色を変更する方法はありますか?

注:私は新しいボーダーを割り当てるときにインセットが削除されていることを前提としています。しかし、私はそれについてではない100%確信しています。

JButtonの変更境界線の色

Frakcool:

代わりに作成するのでLineBorder、使用CompoundBorder

button2.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createLineBorder(Color.RED, 1), 
            BorderFactory.createEmptyBorder(
                button1.getBorder().getBorderInsets(button1).top, 
                button1.getBorder().getBorderInsets(button1).left, 
                button1.getBorder().getBorderInsets(button1).bottom, 
                button1.getBorder().getBorderInsets(button1).right)));

私が取ったBorderInsetsためにbutton1、それらの両方が同じサイズを持っているので。

私の答えは、のために@MadProgrammerの回答に基づいており、この質問

ここでは、画像の説明を入力します。


ところで伸びていないJFrame、代わりにそのインスタンスを作成し、あなたが本当にコンポーネントを拡張する必要がある場合は、それもJPanelプログラム内でそれを作成する対のJFrameを拡張

また、呼び出すことを忘れないでください

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

あなたにJFrameあなたがそれを閉じると、インスタンスので、あなたのプログラムが終了していること。

そしてまた、あなたは上でより多くのこのの参照、EDT上でプログラムを配置するために逃したこの答え

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=204799&siteId=1