javaGUI学习43:Swing-插入式界面样式

即一个组件的界面样式是通过把一个特殊的UI代表插入这个组件来设置的。

1、界面样式结构

javax. swing包中的三个类:LookAndFeel、UIDefaults和 UIManager为Swing的界面样式提供了管理手段。

LookAndFeel是一个抽象类。它可以扩展为一个界面样式提供一个特性。LookAndFeel类提供了很多方便的 static方法,还定义了抽象方法来指定如下界面样式属性。

UIDefaults是java.util.Hashtable的一个直接扩展,它维护界面样式的缺省值。开发人员可以不直接操纵UIDefaults 实例,而通过UIManager类访问缺省值。

UManager类实现的所有方法都是静态的。

1.1 界面样式

Swing 的可插人界面样式结构允许用一个组件的缺省特性,如边框、颜色和字体等来设置另一个组件。这样,一个文本域可以设置成像一个标签——这就是关键所在。

界面样式用保存在一个UIDefaults实例(一个哈希表)中的已知名称定义一组缺省属性。

lookAndFeel类为在一个JComponent实例上安装缺省属性提供了方便的方法:

Public static vod installBorder (JCormponent,String border )
Public static vod installCoors (JComponent,String forground,String background)
Public static void installColorsAndFont ( JComponent,String forground,String background,String font)

例如,installBordler方法根据传送给它的字符串参数(一个已知名的属性)设置一个组件的边框。例如,一-个按钮的缺省边框可以这样来设置:

JButton button = new JButton ("a button”) ;
LookAndFeel. installBorder ( button."Button. border");
1.2 界面样式缺省值

所有的界面样式都维护一个包含缺省组件属性的哈希表;例如,BasicLookAndFeel为按钮边框、背景、前景颜色和图标等定义了缺省值。

界面样式的缺省值是在UIDefaults 的一个实例中维护的;但是,开发人员最好不要直接访问这些缺省值。可以用UIManager类来访问当前界面样式的缺省值。

UIDefaults 是一个维护界面样式的缺省值的哈希表,并在这些缺省值改变时产生属性变化事件。UIDefaults类还提供了方便的方法来减少对从哈希表中获取的值进行类型转换。这些值是以 Objects类型存储在哈希表中的。

1.3 UI管理器

顾名思义,UIManager类管理信息,即管理Swing 小应用程序和应用程序界面样式的状态。UIManager类为访问提供了如下信息和服务的静态方法:

  • 设置Swing 小应用程序或应用程序的界面样式。
  • 提供对当前界面样式的缺省值的访问。
  • 提供对界面样式状态信息的访问。
  • 通知界面样式的变化情况。
  • 从Swing属性文件中装入Swing 属性。
1.4 UI资源

如果这些资源是UIResource的实例的话,Swing将只替换UI资源。

2、java 界面样式

Java界面样式是用代码名(Java)命名的一种Metal界面样式,是Swing小应用程序和应用程序的缺省跨平台界面样式。Java界面样式提供了两个在Swing的其他标准界面样式中没有的属性:客户属性和主题( themes)。

对某些组件来说,可以设置客户属性未影响这些组件在Java界面样式中的界面样式。使用主题可以通过定义在界面样式中通用的颜色和字体来定制Java界面样式的外观。

2.1 客户属性

JIntemalFrame. isPalette——确定用于内部窗体的边框的类型。调色板边框(当JInternal-Frame . isPalette为true时使用)比正规的内部窗体边框细。
JScrollBar. isFreeStanding——如果一个滚动条是独立的,在它的周围就有一个蚀刻的边框。如果一个滚动条不是独立的,其边框则只在该滚动条的上边和左边绘制。从图7-8中可以看到freeStanding属性的效果。
JSlider. isFilled——填充的水平滑杆用一种颜色填充滑柄左边的滑槽。垂直滑杆用颜色填充滑柄下方的滑槽。
JToolBar . isRollover——影响工具栏按钮边框的绘制方式。如果这个属性为true,则当光标进人一个按钮时绘制按钮边框,并当光标离开时擦除按钮边框。其效果与Netscape Navigator中的工具栏按钮类似。
JTree. lineStyle——影响一个树中节点之间的连线的绘制方式。

2.2 主题

Java界面样式定义主题,主题是在Java界面样式中通用的颜色和字体定义。主题是通过扩展抽象的javax.swing. plaf . metal . MetalTheme类实现的,这个类定义了getControlColor ()等返回颜色的方法和getControlTextFont())等返回字体的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Java GUI编程实现计算器,你可以使用Swing和AWT这两种Java GUI工具包之一。 以下是一个简单的Java GUI计算器的实现示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Calculator extends JFrame implements ActionListener { private JButton[] numberButtons; private JButton[] operatorButtons; private JButton clearButton, equalsButton, decimalButton; private JTextField textField; private double num1 = 0, num2 = 0, result = 0; private char operator; public Calculator() { setTitle("Calculator"); // Create the number buttons numberButtons = new JButton[10]; for (int i = 0; i < 10; i++) { numberButtons[i] = new JButton(String.valueOf(i)); } // Create the operator buttons operatorButtons = new JButton[4]; operatorButtons[0] = new JButton("+"); operatorButtons[1] = new JButton("-"); operatorButtons[2] = new JButton("*"); operatorButtons[3] = new JButton("/"); // Create the clear, equals, and decimal buttons clearButton = new JButton("C"); equalsButton = new JButton("="); decimalButton = new JButton("."); // Create the text field textField = new JTextField(10); textField.setEditable(false); // Set the layout manager and add the components setLayout(new GridBagLayout()); GridBagConstraints gc = new GridBagConstraints(); gc.gridx = 0; gc.gridy = 0; gc.gridwidth = 4; add(textField, gc); gc.gridwidth = 1; gc.gridy = 1; for (int i = 0; i < 10; i++) { gc.gridx = i % 3; gc.gridy = i / 3 + 2; add(numberButtons[i], gc); numberButtons[i].addActionListener(this); } gc.gridx = 0; gc.gridy = 5; add(operatorButtons[0], gc); operatorButtons[0].addActionListener(this); gc.gridx = 1; add(operatorButtons[1], gc); operatorButtons[1].addActionListener(this); gc.gridx = 2; add(operatorButtons[2], gc); operatorButtons[2].addActionListener(this); gc.gridx = 3; add(operatorButtons[3], gc); operatorButtons[3].addActionListener(this); gc.gridx = 0; gc.gridy = 6; add(clearButton, gc); clearButton.addActionListener(this); gc.gridx = 1; add(equalsButton, gc); equalsButton.addActionListener(this); gc.gridx = 2; add(decimalButton, gc); decimalButton.addActionListener(this); setSize(200, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent e) { for (int i = 0; i < 10; i++) { if (e.getSource() == numberButtons[i]) { textField.setText(textField.getText() + i); } } if (e.getSource() == decimalButton) { textField.setText(textField.getText() + "."); } if (e.getSource() == clearButton) { textField.setText(""); num1 = 0; num2 = 0; result = 0; operator = ' '; } if (e.getSource() == operatorButtons[0]) { num1 = Double.parseDouble(textField.getText()); operator = '+'; textField.setText(""); } if (e.getSource() == operatorButtons[1]) { num1 = Double.parseDouble(textField.getText()); operator = '-'; textField.setText(""); } if (e.getSource() == operatorButtons[2]) { num1 = Double.parseDouble(textField.getText()); operator = '*'; textField.setText(""); } if (e.getSource() == operatorButtons[3]) { num1 = Double.parseDouble(textField.getText()); operator = '/'; textField.setText(""); } if (e.getSource() == equalsButton) { num2 = Double.parseDouble(textField.getText()); switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': result = num1 / num2; break; } textField.setText(Double.toString(result)); } } public static void main(String[] args) { new Calculator(); } } ``` 这个示例应该可以实现一个简单的Java GUI计算器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值