【发布时间】:2018-05-10 09:48:32
【问题描述】:
我正在为一家公司创建一个定制的外观和感觉,作为我毕业的最后一个实习船。我已经在这部分卡了几天了,我和我的同事似乎无法修复它。
我正在尝试为外观创建一个自定义单选按钮和一个复选框。现在,当我想将库存显示到屏幕/ 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 = new JCheckBox("Checkbox"); JRadioButton Radio = new JRadioButton("Radio");
它确实显示字符串但不显示图标。
【问题讨论】:
-
你所说的“观感”到底是什么意思?
-
我正在为他们的 Java 应用程序创建自定义外观。像 Nimbus、WebLAF 和那些东西。只是现有外观的自定义皮肤。
-
我认为您没有对这些组件进行自定义蒙皮。
-
确实,我没有制作自定义 CheckBox 或 RadioButton,我无法在任何地方找到如何做到这一点。除此之外,如果我不这样做是合乎逻辑的,它至少会显示库存但它不会那样做,即使我调用超类也是如此。 @jhonatan2760
-
有人有想法吗?
标签: java swing user-interface icons look-and-feel