独自のルック アンド フィールを作成し、MetalLookAndFeel を派生させたいと考えています。すべてのファイルが同じディレクトリにあり、パッケージ宣言がない非常に基本的な構成をセットアップしました。
MyLookAndFeel.java
import javax.swing.UIDefaults;
import javax.swing.plaf.basic.BasicLookAndFeel;
import javax.swing.plaf.metal.MetalLookAndFeel;
public class MyLookAndFeel extends MetalLookAndFeel {
public MyLookAndFeel() {
setCurrentTheme(new DefaultMetalTheme());
}
@Override
protected void initClassDefaults(UIDefaults table) {
super.initClassDefaults(table);
table.put( "ButtonUI", "MyButtonUI");
}
@Override
public String getName() {
return "MyLookAndFeel";
}
@Override
public String getID() {
return "MyLookAndFeel";
}
@Override
public String getDescription() {
return "MyLookAndFeel";
}
@Override
public boolean isNativeLookAndFeel() {
return false;
}
@Override
public boolean isSupportedLookAndFeel() {
return true;
}
}
また、MyButtonUI.java もあります。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.AbstractButton;
import javax.swing.JComponent;
import javax.swing.plaf.metal.MetalButtonUI;
public class MyButtonUI extends MetalButtonUI {
@Override
public void paint(Graphics g, JComponent c) {
}
@Override
protected void paintButtonPressed(Graphics g, AbstractButton b) {
g.fillRect(0, 0, 40, 40);
}
@Override
protected void paintText(Graphics g, AbstractButton b, Rectangle textRect,
String text) {
}
}
paint
上記のコードでは、このコンストラクターを使用してクラスを実行すると、奇妙なボタンが描画される (またはメソッドが空であるためボタンがまったく表示されない) と予想されますTestUI JFrame
が、ボタンは通常のように静かに見えます。
public TestUI() throws UnsupportedLookAndFeelException {
UIManager.setLookAndFeel(new MyLookAndFeel());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200,200);
setLayout(new FlowLayout());
add(new JButton("Press"));
add(new JLabel("Text"));
setVisible(true);
}
私は何か重要なことを忘れていますか?