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%確信しています。
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上でプログラムを配置するために逃したこの答え