JAVA的图形用户界面代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA的图形用户界面代码相关的知识,希望对你有一定的参考价值。

要做实验了,但是还是没头绪。
要求如下:编辑程序,运行后界面上有一个TextField组件和一个TextArea组件,另外还有一些Checkbox组件和一个Choice组件。在TextField中输入一个英语单词,TextArea中就添加该英语单词。Checkbox分别表示一些字母表中大写的英文字母。选择某个Checkbox所代表的一个字母,Choice组件将显示所有以左边选择框中所选的字母开头的单词。
谢谢了!

package hao;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.io.File;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;

public class ChatPanel extends JPanel

private static final long serialVersionUID = 1L;
JButton send,record,saveRecord,image;
JTextArea inputArea;
JTextPane text;//注意用法****************************************************************************
JComboBox fontName = null, fontSize = null, fontStyle = null, fontColor = null,fontBackColor = null;
public StyledDocument doc = null; JScrollPane scrollPane;JPanel textChat;

JButton music;
public ChatPanel()
setLayout(new BorderLayout());

text = new JTextPane();
text.setEditable(false);

doc = text.getStyledDocument();//跟踪文本和图片写到该区域的位置*************************************
scrollPane = new JScrollPane(text);
//注意下面对JComboBox的巧用***********************************************************************
String[] str_name = "宋体", "黑体", "Dialog", "Gulim" ;
String[] str_Size = "12", "14", "18", "22", "30", "40" ;
String[] str_Style = "常规", "斜体", "粗体", "粗斜体" ;
String[] str_Color = "黑色", "红色", "蓝色", "黄色", "绿色" ;
String[] str_BackColor = "无色", "灰色", "淡红", "淡蓝", "淡黄", "淡绿" ;
fontName = new JComboBox(str_name);
fontSize = new JComboBox(str_Size);
fontStyle = new JComboBox(str_Style);
fontColor = new JComboBox(str_Color);
fontBackColor = new JComboBox(str_BackColor);

fontName.setBackground(new Color(255,153,255));
fontSize.setBackground(new Color(255,153,255));
fontStyle.setBackground(new Color(255,153,255));
fontColor.setBackground(new Color(255,153,255));
fontBackColor.setBackground(new Color(255,153,255));
Box box = Box.createVerticalBox();//创建一个可以容纳多个Box组件的Box*******************************
Box box_1 = Box.createHorizontalBox();
Box box_2 = Box.createHorizontalBox();
Box box_4 = Box.createHorizontalBox();
box.add(box_1);
box.add(box_2);
box.add(box_4);
JLabel b1= new JLabel("字体~~"), b2 = new JLabel("样式~~"),b3 = new JLabel("字号~~"),b4 = new JLabel("颜色~~"),b5 = new JLabel("背景~~");
b1.setBackground(new Color(255,153,255));
b2.setBackground(new Color(255,153,255));
b3.setBackground(new Color(255,153,255));
b4.setBackground(new Color(255,153,255));
b5.setBackground(new Color(255,153,255));
box_1.add(b1);
box_1.add(fontName);
box_1.add(Box.createHorizontalStrut(8));
box_1.add(b2);
box_1.add(fontStyle);
box_1.add(Box.createHorizontalStrut(8));
box_1.add(b3);
box_1.add(fontSize);
box_2.add(Box.createHorizontalStrut(8));
box_2.add(b4);
box_2.add(fontColor);
box_2.add(Box.createHorizontalStrut(8));
box_4.add(b5);
box_4.add(fontBackColor);

textChat = new JPanel();
textChat.setLayout(new BorderLayout());
textChat.setBackground(new Color(255,153,255));

inputArea = new JTextArea(3, 20);
inputArea.setLineWrap(true); //设置文本区的换行策略。88888*********************************

send = new JButton("发送");
record=new JButton("显示记录");
saveRecord=new JButton("储存记录");
image=new JButton("表情");
send.setBackground(new Color(255,153,255));
record.setBackground(new Color(255,153,255));
saveRecord.setBackground(new Color(255,153,255));
image.setBackground(new Color(255,153,255));
Box box_3 = Box.createHorizontalBox();
box_3.add(send); box_3.add(Box.createHorizontalStrut(8));//设置按钮间距*************************888
box_3.add(record); box_3.add(Box.createHorizontalStrut(8)); //设置按钮间距*************************888
box_3.add(saveRecord); box_3.add(Box.createHorizontalStrut(8));//设置按钮间距*************************888
box_3.add(image);
box.setBorder(BorderFactory.createLineBorder(new Color(102,102,0),5));//设置Box的边框线********************
box_3.setBorder(BorderFactory.createLineBorder(new Color(102,102,0),5));
textChat.add(box,BorderLayout.NORTH);
textChat.add(inputArea,BorderLayout.CENTER);
textChat.add(box_3, BorderLayout.SOUTH);

inputArea.requestFocus(true);
inputArea.setBorder(BorderFactory.createLineBorder(new Color(102,102,0),5));//设置输入窗口边框线*******************
text.setBorder(BorderFactory.createLineBorder(new Color(102,102,0),8));//设置输入窗口边框线*******************

JPanel audioPanel = new JPanel();//最上面的边框************************************************************************
audioPanel.setBackground(new Color(255,153,255));
audioPanel.setLayout(new GridLayout(1,1));

music = new JButton("想听就听");
music.setPreferredSize(new Dimension(320,50));
music.setBorder(BorderFactory.createLineBorder(Color.BLACK,10));//设置输入窗口边框线*******************
audioPanel.add(music);

add(audioPanel, BorderLayout.NORTH);
add(scrollPane,BorderLayout.CENTER);
add(textChat, BorderLayout.SOUTH);


void insertIcon(ImageIcon image)
text.setCaretPosition(doc.getLength());
text.insertIcon(image);
insert(new MessageStyle());//?????????????????????????????????????????????????????????????????????????????/


public void insert(MessageStyle attrib)
try

doc.insertString(doc.getLength(), attrib.getText() + "\n", attrib.getAttrSet());//写完后接着换行************

catch (BadLocationException e)
e.printStackTrace();



public MessageStyle getMessageStyle(String line)

MessageStyle att = new MessageStyle();

att.setText(line);
att.setName((String) fontName.getSelectedItem());
att.setSize(Integer.parseInt((String) fontSize.getSelectedItem()));
String temp_style = (String) fontStyle.getSelectedItem();
if (temp_style.equals("常规"))
att.setStyle(MessageStyle.GENERAL);

else if (temp_style.equals("粗体"))
att.setStyle(MessageStyle.BOLD);

else if (temp_style.equals("斜体"))
att.setStyle(MessageStyle.ITALIC);

else if (temp_style.equals("粗斜体"))
att.setStyle(MessageStyle.BOLD_ITALIC);


String temp_color = (String) fontColor.getSelectedItem();
if (temp_color.equals("黑色"))
att.setColor(new Color(0, 0, 0));

else if (temp_color.equals("红色"))
att.setColor(new Color(255, 0, 0));

else if (temp_color.equals("蓝色"))
att.setColor(new Color(0, 0, 255));

else if (temp_color.equals("黄色"))
att.setColor(new Color(255, 255, 0));

else if (temp_color.equals("绿色"))
att.setColor(new Color(0, 255, 0));


String temp_backColor = (String) fontBackColor.getSelectedItem();
if (!temp_backColor.equals("无色"))
if (temp_backColor.equals("灰色"))
att.setBackColor(new Color(200, 200, 200));

else if (temp_backColor.equals("淡红"))
att.setBackColor(new Color(255, 200, 200));

else if (temp_backColor.equals("淡蓝"))
att.setBackColor(new Color(200, 200, 255));

else if (temp_backColor.equals("淡黄"))
att.setBackColor(new Color(255, 255, 200));

else if (temp_backColor.equals("淡绿"))
att.setBackColor(new Color(200, 255, 200));


return att;


参考技术A 0分额 懒得写

《Java并发编程实战》第九章 图形用户界面应用程序界面 读书笔记


一、为什么GUI是单线程化

传统的GUI应用程序通常都是单线程的。
1. 在代码的各个位置都须要调用poll方法来获得输入事件(这样的方式将给代码带来极大的混乱)
2. 通过一个“主事件循环(Main Event Loop)”来间接地运行应用程序的全部代码。


假设在主事件循环中调用的代码须要非常长时间才干运行完毕。那么用户界面就会“冻结”,直到代码运行完毕。这是由于仅仅有当运行控制权返回到主事件循环后,才干处理兴许的用户界面事件。



非常多尝试多线程的GUI框架的努力,最总都由于静态条件和死锁导致的稳定性问题,又回到单线程的时间队列模型的老路上。

1. 顺序事件处理
由于仅仅有唯一的线程在处理GUI任务。全部任务都不须要考虑并发且都是顺序运行,可是问题是假设在任务中运行时间过长,或导致兴许操作无法响应。(Android会提示Andorid Not Response异常)


2. Swing中的线程限制
GUI的单线程规则:组件与模型仅仅能在事件分派线程中被创建、改动和请求。
在Andorid中假设在子线程进行创建或者更新UI操作会抛出异常。

二、短期的GUI任务

GUI应用程序中,事件起源于事件线程。冒泡似得传递到达应用程序提供的监听器,假设是比較简单的改动颜色等,能够直接在事件线程中处理。



三、耗时GUI任务

由于GUI任务有线程限制,所以须要子线程处理耗时操作,通常最后还须要在子线程进行刷新。

1. 取消
2. 进度与完毕标识
3. SwingWorker
在Andorid中使用AsyncTask

四、共享数据模型

避免响应性的最简单的方式是初始化时一次性读取到内存中,这样须要考虑是否占用内存过多的问题。



1. 线程安全的数据模型
ConcurrentHashMap无法提供一致的数据快照。

CopyOnWriteArrayList同一时候获得线程安全性、一致性以及良好的响应性。

2. 分解数据模型
假设一个数据模型必须被多个线程共享,并且因为堵塞、一致性或复杂度等原因无法实现一个线程安全的模型时。能够考虑使用分解模型设计。

五、其它形式的单线程子系统

一些情况下无法避免同步或者死锁问题。比如:原生库(Native Library)要求、通过System.loadLibrary载入时。都必须放在同一个线程中运行。


将Future和newSingleThreadExecutor一起使用处理单线程可取消的任务。








































以上是关于JAVA的图形用户界面代码的主要内容,如果未能解决你的问题,请参考以下文章

凯撒密码java编程实现图形界面化代码

java 图形界面设计制作计算器

java编程采用图形界面实现两个内容的交换,图形界面如下图

java在windows系统下创建图形界面的代码移植到linux系统编译能不能创建图形界面?

Java编写一个图形界面

Java图形用户界面编程