[英]RadioButton and CheckBox not showing in Custom Look and Feel
我正在為公司創建自定義外觀,作為我畢業的最終實習船。 我已經在這部分上停留了幾天,而我和我的同事似乎無法修復它。
我正在嘗試為外觀創建一個自定義單選按鈕和一個復選框。 現在,當我想在屏幕/ JFrame上顯示庫存商品時,它將不會顯示。
激活外觀后,復選框和單選按鈕就會消失。 但是它們的標簽確實顯示在屏幕上。 當我在外觀之外創建復選框/單選框或為它們提供靈巧的外觀時,它會顯示。 因此,我的外觀在某種程度上破壞了事情。 有人可以幫忙嗎?
這是我的單選按鈕代碼;
public class MyRadioBut extends BasicRadioButtonUI {
public MyRadioBut()
{
super();
}
public static ComponentUI createUI(JComponent c) {
return new MyRadioBut();
}
@Override
public void installUI(final JComponent c) {
super.installUI(c);
}
public static MyRadioBut createRadio()
{
MyRadioBut radio = new MyRadioBut();
return radio;
}
private boolean defaults_initialized = false;
@Override
public void installDefaults(AbstractButton b) {
super.installDefaults(b);
}
}
復選框的代碼是相同的。
外觀代碼;
package iac.lookandfeel;
import java.awt.Font;
import javax.swing.SwingUtilities;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.plaf.basic.BasicLookAndFeel;
public class MyLookAndFeel extends BasicLookAndFeel {
/**
*
*/
private static final long serialVersionUID = 1L;
static MyButton btn = new MyButton();
static MyProgressBar pb = new MyProgressBar();
static MyLabel lbl = new MyLabel();
static MyTab tab = new MyTab();
static MyRadioBut radio = new MyRadioBut();
static MyComboBox combo = new MyComboBox();
public MyLookAndFeel() {
super();
}
@Override
public String getName() {
// TODO Auto-generated method stub
return "IAC Look and Feel";
}
@Override
public String getID() {
// TODO Auto-generated method stub
return "IAC Look and Feel";
}
@Override
public String getDescription() {
// TODO Auto-generated method stub
return "IAC's Look And Feel";
}
@Override
public boolean isNativeLookAndFeel() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isSupportedLookAndFeel() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean getSupportsWindowDecorations()
{
return true;
}
public static void setAllFonts() {
Font defaultFont = UIManager.getDefaults().getFont("Button.font");
int defaultSize = defaultFont.getSize();
Font font = new Font("Serif", Font.PLAIN, 50);
UIManager.put("Button.font", font);
UIManager.put("RadioButton.font", font);
UIManager.put("CheckBox.font", font);
UIManager.put("ComboBox.font", font);
UIManager.put("Label.font", font);
UIManager.put("TabbedPane.font", font);
UIManager.put("TextField.font", font);
UIManager.put("PasswordField.font", font);
UIManager.put("TextArea.font", font);
UIManager.put("ProgressBar.font", font);
}
@Override
protected void initClassDefaults(UIDefaults table)
{
setAllFonts();
MyButton.createButton();
MyProgressBar.createBar();
MyLabel.createLabel();
MyTab.createTab();
MyRadioBut.createRadio();
MyCheckBox.createCheckBox();
MyComboBox.createCombo();
super.initClassDefaults(table);
String IACPackage = "iac.lookandfeel.";
final String basicPackageName = "javax.swing.plaf.basic.";
Object[] uiDefaults = {
"ButtonUI", IACPackage + "MyButton",
"CheckBoxUI", IACPackage + "MyCheckBox",
"ColorChooserUI", basicPackageName + "BasicColorChooserUI",
"FormattedTextFieldUI", basicPackageName + "BasicFormattedTextFieldUI",
"MenuBarUI", basicPackageName + "BasicMenuBarUI",
"MenuUI", basicPackageName + "BasicMenuUI",
"MenuItemUI", basicPackageName + "BasicMenuItemUI",
"CheckBoxMenuItemUI", basicPackageName + "BasicCheckBoxMenuItemUI",
"RadioButtonMenuItemUI", basicPackageName + "BasicRadioButtonMenuItemUI",
"RadioButtonUI", IACPackage + "MyRadioBut",
"ToggleButtonUI", basicPackageName + "BasicToggleButtonUI",
"PopupMenuUI", basicPackageName + "BasicPopupMenuUI",
"ProgressBarUI", IACPackage + "MyProgressBar",
"ScrollBarUI", basicPackageName + "BasicScrollBarUI",
"ScrollPaneUI", basicPackageName + "BasicScrollPaneUI",
"SplitPaneUI", basicPackageName + "BasicSplitPaneUI",
"SliderUI", basicPackageName + "BasicSliderUI",
"SeparatorUI", basicPackageName + "BasicSeparatorUI",
"SpinnerUI", basicPackageName + "BasicSpinnerUI",
"ToolBarSeparatorUI", basicPackageName + "BasicToolBarSeparatorUI",
"PopupMenuSeparatorUI", basicPackageName + "BasicPopupMenuSeparatorUI",
"TabbedPaneUI", IACPackage + "MyTab",
"TextAreaUI", basicPackageName + "BasicTextAreaUI",
"TextFieldUI", basicPackageName + "BasicTextFieldUI",
"PasswordFieldUI", basicPackageName + "BasicPasswordFieldUI",
"TextPaneUI", basicPackageName + "BasicTextPaneUI",
"EditorPaneUI", basicPackageName + "BasicEditorPaneUI",
"TreeUI", basicPackageName + "BasicTreeUI",
"LabelUI", IACPackage + "MyLabel",
"ListUI", basicPackageName + "BasicListUI",
"ToolBarUI", basicPackageName + "BasicToolBarUI",
"ToolTipUI", basicPackageName + "BasicToolTipUI",
"ComboBoxUI", IACPackage + "MyComboBox",
"TableUI", basicPackageName + "BasicTableUI",
"TableHeaderUI", basicPackageName + "BasicTableHeaderUI",
"InternalFrameUI", basicPackageName + "BasicInternalFrameUI",
"DesktopPaneUI", basicPackageName + "BasicDesktopPaneUI",
"DesktopIconUI", basicPackageName + "BasicDesktopIconUI",
"FileChooserUI", basicPackageName + "BasicFileChooserUI",
"OptionPaneUI", basicPackageName + "BasicOptionPaneUI",
"PanelUI", basicPackageName + "BasicPanelUI",
"ViewportUI", basicPackageName + "BasicViewportUI",
"RootPaneUI", basicPackageName + "BasicRootPaneUI",
};
// UIManager.put(MyLookAndFeel.UI_CLASS_ID, MyButton.class.getName());
table.putDefaults(uiDefaults);
}
}
IACPackage是我自己的程序包,可在所有組件中使用。
希望你們中的一個有一個主意。
我有一個測試GUI,可以測試外觀:我像這樣創建復選框和單選按鈕;
JCheckBox CBox =新的JCheckBox(“ Checkbox”); JRadioButton Radio =新的JRadioButton(“ Radio”);
它確實顯示字符串,但不顯示圖標。
自己修復。
Icon defaultIcon;
defaultIcon = UIManager.getIcon("CheckBox.icon");
UIManager.put("CheckBox.icon", defaultIcon);
我用它來從UI管理器中獲取默認圖標,然后將其與put語句放回去。 愚蠢的解決方案,但它可以工作!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.