这次要求简单地应用一下java的一些图形用户界面编辑的组件类,布局~
虽然本次设计的结构有点乱,不过也总算把结果做出来了,要对类更加熟悉才能写出更好结构的程序~
下面是效果图:
下面是源代码:
// SevenBaseFrame.java
/**
* 这是一个包含了七个基本组件的可视化界面图。
* 使用GridLayout布局,然后,再定义七个JPanel变量,每个变量用于接收一个组件的布局;
* 此外,这七个基本组件包括 检签组件、按钮组件、文本框组件、文本区组件、单选按钮组件、复选框、下拉列表组件。
**/
import java.awt.*;
import javax.swing.*;
import java.lang.*;
import java.awt.event.*;
import java.util.*;
import java.awt.Container.*;
public class SevenBaseFrame extends JFrame
{
public JPanel labelp;
public JPanel buttonp;
public JPanel textfieldp;
public JPanel textAreap;
public JPanel radiop;
public JPanel checkboxp;
public JPanel combop;
public SevenBaseFrame(){
Container sevenC = getContentPane();
sevenC.setLayout(new GridLayout(4, 2, 10, 10)); // 设置总布局2行2列,行列间距都为10
labelp = new JPanel();
buttonp = new JPanel();
textfieldp = new JPanel();
textAreap = new JPanel();
radiop = new JPanel();
checkboxp = new JPanel();
combop = new JPanel();
JLl jlabel= new JLl(labelp);
JB jbutton = new JB(buttonp);
JT jtextfield = new JT(textfieldp);
JTA jtextarea = new JTA(textAreap);
JR jradio = new JR(radiop);
Jcb jcheckbox = new Jcb(checkboxp);
Jlb jcombo = new Jlb(combop);
sevenC.add(labelp);
sevenC.add(buttonp);
sevenC.add(textfieldp);
sevenC.add(textAreap);
sevenC.add(radiop);
sevenC.add(checkboxp);
sevenC.add(combop);
setExtendedState(JFrame.MAXIMIZED_BOTH); // 全屏
setVisible(true); // 可见
this.setTitle("图形用户界面组件");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args){
SevenBaseFrame test = new SevenBaseFrame();
}
public class JLl extends JFrame
{
private JLabel label;
public JLl(JPanel p){
label = new JLabel("显示文字的标签"); // 使用文本创建一个标签对象
label.setFont(new Font("Serif", Font.PLAIN, 20)); // 设置标签字体
label.setToolTipText("这是标签对象"); // 设置标签的工具提示
p.add(label); // 将标签对象添加到面板对象p上
}
}
public class JB extends JFrame
{
private JButton button1, button2;
public JB(JPanel p){
button1 = new JButton("按钮 1"); // 创建按钮对象
button1.setFont(new Font("Serif", Font.PLAIN, 20));
ImageIcon img1 = new ImageIcon("picture1.png");
ImageIcon img2 = new ImageIcon("picture2.png");
button2 = new JButton("按钮2", img2);
button2.setRolloverIcon(img1);
button2.setFont(new Font("Serif", Font.PLAIN, 14));
// 为组件注册监听器
BHandler h = new BHandler();
button1.addActionListener(h);
button2.addActionListener(h);
// 将各种组件添加到内容面板
p.add(button1);
p.add(button2);
}
private class BHandler implements ActionListener{
public void actionPerformed(ActionEvent event){
JOptionPane.showMessageDialog(JB.this, "你按了:" + event.getActionCommand());
}
}
}
public class JT extends JFrame
{
private JTextField t1, t2, t3;
private JPasswordField k1;
public JT(JPanel p){
p.setLayout(new FlowLayout());
p.setBackground(Color.YELLOW);
t1 = new JTextField(10); // 创建文本框对象,宽度为10
t2 = new JTextField("请输入文本"); // 创建带有初始文本的文本框对象
t2.setFont(new Font("Serif", Font.PLAIN, 12));
t3 = new JTextField("不可编辑的文本框", 20); // 创建带有初始文本的文本框对象,宽度为12
t3.setFont(new Font("Serif", Font.PLAIN, 12));
t3.setEditable(false); // 设置该文本框为不可编辑状态
k1 = new JPasswordField("口令", 10); // 创建密码框
p.add(t1);
p.add(t2);
p.add(t3);
p.add(k1);
}
}
public class JTA extends JFrame
{
private JTextArea ta1, ta2, ta3, ta4;
public JTA(JPanel p){
p.setLayout(new GridLayout(4, 1, 5, 5));
ta1 = new JTextArea(); // 利用不同的构造方法创建文本区对象
ta2 = new JTextArea(2, 8);
ta3 = new JTextArea("3");
ta4 = new JTextArea("4", 5, 10);
ta1.setFont(new Font("Serif", Font.PLAIN, 12));
ta2.setFont(new Font("Serif", Font.PLAIN, 12));
ta3.setFont(new Font("Serif", Font.PLAIN, 12));
ta4.setFont(new Font("Serif", Font.PLAIN, 12));
ta1.setText("JTextArea1"); // setText()方法会将原来的内容清除
ta2.append("JTextArea2"); // 将设置的字符串接在原来文本区文字之后
ta4.setTabSize(10); // 设置字体大小
ta4.setLineWrap(true); // 设置自动换行
p.add(new JScrollPane(ta1));
p.add(new JScrollPane(ta2));
p.add(new JScrollPane(ta3));
p.add(new JScrollPane(ta4));
}
}
public class JR extends JFrame
{
private JPanel p1, p2;
private JRadioButton red, green, blue;
private ButtonGroup buttonGroup;
public JR(JPanel p){
Container c = getContentPane();
p.add(c);
p1 = new JPanel(); // 创建一个用来显示颜色的面板对角
p1.setBackground(Color.RED);
c.add(p1, BorderLayout.CENTER);
buttonGroup = new ButtonGroup(); // 创建单选按钮选项
red = new JRadioButton("红色", true); // 创建单选按钮选项
green = new JRadioButton("绿色");
blue = new JRadioButton("蓝色");
red.setFont(new Font("Serif", Font.PLAIN, 14)); // 设置字体
green.setFont(new Font("Serif", Font.PLAIN, 14));
blue.setFont(new Font("Serif", Font.PLAIN, 14));
buttonGroup.add(red);
buttonGroup.add(green);
buttonGroup.add(blue);
rHandler h = new rHandler(); // 创建监听器
red.addItemListener(h);
blue.addItemListener(h);
green.addItemListener(h);
p2 = new JPanel();
p2.add(red);
p2.add(green);
p2.add(blue);
c.add(p2, BorderLayout.SOUTH);
}
private class rHandler implements ItemListener{ // 类中类,类的嵌套
public void itemStateChanged(ItemEvent event){
if(red.isSelected()){
p1.setBackground(Color.red);
}
else if(blue.isSelected()){
p1.setBackground(Color.blue);
}
else{
p1.setBackground(Color.green);
}
}
}
}
public class Jcb extends JFrame
{
private JLabel label;
private JCheckBox b, i;
public Jcb(JPanel f){
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.setBackground(Color.YELLOW);
f.add(c);
label = new JLabel("请注意观察宋体文字的变化");
label.setFont(new Font("Serif", Font.PLAIN, 20));
c.add(label);
b = new JCheckBox("粗体"); // 创建复选框
i = new JCheckBox("斜体");
b.setFont(new Font("Serif", Font.PLAIN, 16));
i.setFont(new Font("Serif", Font.PLAIN, 16));
b.setBackground(Color.YELLOW);
i.setBackground(Color.YELLOW);
CBHandler h = new CBHandler(); // 创建监听器
b.addItemListener(h); // 注册监听器
i.addItemListener(h);
c.add(b);
c.add(i);
}
private class CBHandler implements ItemListener
{
private int vb = Font.PLAIN;
private int vi = Font.PLAIN;
public void itemStateChanged(ItemEvent e){
if(e.getSource() == b) vb = b.isSelected() ? Font.BOLD: Font.PLAIN;
if(e.getSource() == i) vi = i.isSelected() ? Font.ITALIC: Font.PLAIN;
label.setFont(new Font("Serif", vb + vi, 20));
}
}
}
public class Jlb extends JFrame{
private JComboBox lbk;
private JLabel label;
private String names[] = {"华南理工大学", "清华大学", "复旦大学"};
public Jlb(JPanel f){
Container c = getContentPane();
c.setBackground(Color.YELLOW);
f.add(c);
lbk = new JComboBox(names); // 创建下拉列表对象
lbk.setMaximumRowCount(4); // 设置下拉列表所能显示的列表项的最大数目
lbk.setSelectedIndex(0); // 设置默认的选择项
lbk.setFont(new Font("Serif", Font.PLAIN, 14)); // 设置字体
lbk.addItemListener(new lbHandler()); // 注册监听器
label = new JLabel("你选择了:华南理工大学");
label.setFont(new Font("Serif", Font.PLAIN, 14));
c.add(lbk, BorderLayout.NORTH);
c.add(label, BorderLayout.CENTER);
}
private class lbHandler implements ItemListener
{
public void itemStateChanged(ItemEvent e){
if(e.getStateChange() == e.SELECTED){
label.setText("你选择了:" + names[lbk.getSelectedIndex()]);
}
}
}
}
}