本文目录一览:
- 1、如何设置java控件的位置和大小
- 2、什么是java控件?怎样使用java控件?
- 3、JAVA中组建与控件的区别是什么?
- 4、java的容器控件有哪些
- 5、怎样自己做一个java控件
- 6、怎样在Java中美化按钮控件显得美观?
如何设置java控件的位置和大小
Java中通过布局管理器(LayoutManager)来布局控件。
常见的布局管理器如下:
BorderLayout:Frame和Dialog的默认布局管理器。其把面板分为上北、下南、左西、右东和中间,5个部分,在未指定控件大小的情况下,被加入的控件将会随着内容大小自动伸缩,随着窗口的放大缩小也相应的产生伸缩。
FlowLayout :按顺序布局控件。所有控件按照流水一样排列,若当前行放不下了,则自动排到下一行。按子控件的大小(getPreferedSize())在当前面板布局。
GridLayout :网格布局。该布局将所有控件按从左到右,从上到下的形式把控件以网格的形式排列出来。子控件会填满整个面板。
GridBagLayout :网格包布局。能布局复杂界面,但其使用也很复杂,一般不用。
null布局:即将布局管理器设置为null。此时,通过调用子控件的setBounds方法进行布局。
其他布局管理器。以上是Java内置的常用布局管理器,还有一些非官方的好用布局管理器:XYLayout(按大小和位置布局)、VerticalFlowLayout (纵向流水布局)、TableLayout(表格布局)。
一般的Java程序布局方式:用FlowLayout布局一些按钮,用BorderLayout嵌套多个面板。
什么是java控件?怎样使用java控件?
import Java.util.Date;
import java.util.Calendar;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException ;
import java.awt.Color ;
import java.awt.Font;
import java.awt.Point ;
import java.awt.Dimension ;
import java.awt.BorderLayout ;
import java.awt.FlowLayout ;
import java.awt.GridLayout ;
import java.awt.Component ;
import java.awt.Cursor ;
import java.awt.Frame ;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
//import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.jspinner ;
import javax.swing.JSpinner.NumberEditor ;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import javax.swing.SwingConstants ;
import javax.swing.event.ChangeListener ;
import javax.swing.event.ChangeEvent ;
import javax.swing.border.LineBorder ;
public class DateChooserJButton extends JButton {
private DateChooser dateChooser =null;
private String preLabel ="" ;
public DateChooserJButton() {
this(getNowDate()) ;
}
public DateChooserJButton(SimpleDateFormat df , String dateString) {
this() ;
setText(df,dateString) ;
}
public DateChooserJButton(Date date) {
this("",date);
}
public DateChooserJButton(String preLabel , Date date) {
if (preLabel!=null) this.preLabel = preLabel ;
setDate(date) ;
setBorder(null) ;
setCursor(new Cursor(Cursor.HAND_CURSOR)) ;
super.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (dateChooser==null) dateChooser = new DateChooser();
Point p = getLocationOnScreen() ;
p.y = p.y+30 ;
dateChooser.showDateChooser(p) ;
}
}) ;
}
private static Date getNowDate() {
return Calendar.getInstance().getTime() ;
}
private static SimpleDateFormat getDefaultDateFormat() {
return new SimpleDateFormat("yyyy年MM月dd日HH时") ;
}
//覆盖父类的方法
public void setText(String s) {
Date date ;
try {
date = getDefaultDateFormat().parse(s) ;
}catch (ParseException e) {
date = getNowDate() ;
}
setDate(date) ;
}
public void setText(SimpleDateFormat df , String s) {
Date date ;
try {
date = df.parse(s) ;
}catch (ParseException e) {
date = getNowDate() ;
}
setDate(date) ;
}
public void setDate(Date date) {
super.setText(preLabel+getDefaultDateFormat().format(date));
}
public Date getDate() {
String dateString = getText().substring(preLabel.length());
try {
return getDefaultDateFormat().parse(dateString);
} catch (ParseException e) {
return getNowDate() ;
}
}
//覆盖父类的方法使之无效
public void addActionListener(ActionListener listener ) {
}
private class DateChooser extends JPanel implements ActionListener ,ChangeListener {
int startYear = 1980; //默认【最小】显示年份
int lastYear = 2050; //默认【最大】显示年份
int width = 200; //界面宽度
int height = 200; //界面高度
Color backGroundColor = Color.gray; //底色
//月历表格配色----------------//
Color palletTableColor = Color.white; //日历表底色
Color todayBackColor = Color.orange; //今天背景色
Color weekFontColor = Color.blue; //星期文字色
Color dateFontColor = Color.black; //日期文字色
Color weekendFontColor = Color.red; //周末文字色
//控制条配色------------------//
Color controlLineColor = Color.pink; //控制条底色
Color controlTextColor = Color.white; //控制条标签文字色
Color rbFontColor = Color.white; //RoundBox文字色
Color rbBorderColor = Color.red; //RoundBox边框色
Color rbButtonColor = Color.pink; //RoundBox按钮色
Color rbBTFontColor = Color.red; //RoundBox按钮文字色
JDialog dialog ;
JSpinner yearSpin ;
JSpinner monthSpin ;
JSpinner hourSpin ;
JButton[][] daysButton = new JButton[6][7] ;
DateChooser() {
setLayout(new BorderLayout());
setBorder(new LineBorder(backGroundColor, 2));
setBackground(backGroundColor);
JPanel topYearAndMonth = createYearAndMonthPanal();
add(topYearAndMonth,BorderLayout.NORTH);
JPanel centerWeekAndDay = createWeekAndDayPanal();
add(centerWeekAndDay,BorderLayout.CENTER);
}
private JPanel createYearAndMonthPanal(){
Calendar c = getCalendar() ;
int currentYear =c.get(Calendar.YEAR);
int currentMonth =c.get(Calendar.MONTH)+1;
int currentHour =c.get(Calendar.HOUR_OF_DAY);
JPanel result = new JPanel();
result.setLayout(new FlowLayout());
result.setBackground(controlLineColor);
yearSpin = new JSpinner(new SpinnerNumberModel(currentYear,startYear,lastYear,1));
yearSpin.setPreferredSize(new Dimension(48,20)) ;
yearSpin.setName("Year") ;
yearSpin.setEditor(new JSpinner.NumberEditor(yearSpin, "####")) ;
yearSpin.addChangeListener(this) ;
result.add(yearSpin) ;
JLabel yearLabel = new JLabel("年");
yearLabel.setForeground(controlTextColor);
result.add(yearLabel);
monthSpin = new JSpinner(new SpinnerNumberModel(currentMonth,1,12,1));
monthSpin.setPreferredSize(new Dimension(35,20)) ;
monthSpin.setName("Month") ;
monthSpin.addChangeListener(this) ;
result.add(monthSpin) ;
JLabel monthLabel = new JLabel("月");
monthLabel.setForeground(controlTextColor);
result.add(monthLabel);
hourSpin = new JSpinner(new SpinnerNumberModel(currentHour,0,23,1));
hourSpin.setPreferredSize(new Dimension(35,20)) ;
hourSpin.setName("Hour") ;
hourSpin.addChangeListener(this) ;
result.add(hourSpin) ;
JLabel hourLabel = new JLabel("时");
hourLabel.setForeground(controlTextColor);
result.add(hourLabel);
return result ;
}
private JPanel createWeekAndDayPanal() {
String colname[] = {"日","一","二","三","四","五","六"};
JPanel result = new JPanel();
//设置固定字体,以免调用环境改变影响界面美观
result.setFont(new Font("宋体", Font.PLAIN, 12));
result.setLayout(new GridLayout(7,7));
result.setBackground(Color.white);
JLabel cell ;
for(int i=0;i7;i++) {
cell = new JLabel(colname[i]);
cell.setHorizontalAlignment(JLabel.RIGHT);
if (i==0 i==6) cell.setForeground(weekendFontColor) ;
else cell.setForeground(weekFontColor) ;
result.add(cell) ;
}
int actionCommandId = 0 ;
for(int i = 0; i 6; i++)
for(int j = 0; j 7; j++) {
JButton numberButton = new JButton();
numberButton.setBorder(null) ;
numberButton.setHorizontalAlignment(SwingConstants.RIGHT);
numberButton.setActionCommand(String.valueOf(actionCommandId)) ;
numberButton.addActionListener(this) ;
numberButton.setBackground(palletTableColor);
numberButton.setForeground(dateFontColor) ;
if (j==0 j==6) numberButton.setForeground(weekendFontColor) ;
else numberButton.setForeground(dateFontColor) ;
daysButton[i][j] = numberButton;
result.add(numberButton) ;
actionCommandId ++ ;
}
return result;
}
private JDialog createDialog(Frame owner ) {
JDialog result = new JDialog(owner,"日期时间选择",true) ;
result.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
result.getContentPane().add(this,BorderLayout.CENTER) ;
result.pack() ;
result.setSize(width, height);
return result ;
}
void showDateChooser(Point position ) {
Frame owner =(Frame)SwingUtilities.getWindowAncestor(DateChooserJButton.this) ;
if (dialog==null dialog.getOwner()!= owner) dialog = createDialog(owner ) ;
dialog.setLocation(getAppropriateLocation(owner ,position ) ) ;
flushWeekAndDay() ;
dialog.show();
}
Point getAppropriateLocation(Frame owner ,Point position ) {
Point result = new Point(position) ;
Point p = owner.getLocation() ;
int offsetX = (position.x+width) - (p.x + owner.getWidth() ) ;
int offsetY = (position.y+height) - (p.y + owner.getHeight() ) ;
if (offsetX 0 ) {
result.x -= offsetX ;
}
if (offsetY 0 ) {
result.y -= offsetY ;
}
return result ;
}
private Calendar getCalendar() {
Calendar result = Calendar.getInstance();
result.setTime(getDate()) ;
return result ;
}
private int getSelectedYear() {
return ((Integer)yearSpin.getValue()).intValue() ;
}
private int getSelectedMonth() {
return ((Integer)monthSpin.getValue()).intValue() ;
}
private int getSelectedHour() {
return ((Integer)hourSpin.getValue()).intValue() ;
}
private void dayColorUpdate(boolean isOldDay) {
Calendar c = getCalendar() ;
int day = c.get(Calendar.DAY_OF_MONTH);
c.set(Calendar.DAY_OF_MONTH,1);
int actionCommandId =day-2+c.get(Calendar.DAY_OF_WEEK) ;
int i = actionCommandId/7;
int j = actionCommandId%7;
if (isOldDay) daysButton[i][j].setForeground(dateFontColor) ;
else daysButton[i][j].setForeground(todayBackColor) ;
}
private void flushWeekAndDay() {
Calendar c = getCalendar() ;
c.set(Calendar.DAY_OF_MONTH,1);
int maxDayNo = c.getActualMaximum(Calendar.DAY_OF_MONTH);
int dayNo = 2 - c.get(Calendar.DAY_OF_WEEK) ;
for(int i = 0; i 6; i++) {
for(int j = 0; j 7; j++) {
String s="" ;
if (dayNo=1 dayNo=maxDayNo ) s = String.valueOf(dayNo) ;
daysButton[i][j].setText(s) ;
dayNo ++ ;
}
}
dayColorUpdate(false) ;
}
public void stateChanged(ChangeEvent e) {
JSpinner source =(JSpinner)e.getSource() ;
Calendar c = getCalendar() ;
if (source.getName().equals("Hour")) {
c.set(Calendar.HOUR_OF_DAY, getSelectedHour());
setDate(c.getTime());
return ;
}
dayColorUpdate(true) ;
if (source.getName().equals("Year"))
c.set(Calendar.YEAR, getSelectedYear());
else
// (source.getName().equals("Month"))
c.set(Calendar.MONTH, getSelectedMonth()-1);
setDate(c.getTime());
flushWeekAndDay() ;
}
public void actionPerformed(ActionEvent e) {
JButton source =(JButton)e.getSource() ;
if (source.getText().length()==0) return ;
dayColorUpdate(true) ;
source.setForeground(todayBackColor) ;
int newDay = Integer.parseInt(source.getText());
Calendar c = getCalendar() ;
c.set(Calendar.DAY_OF_MONTH,newDay);
setDate(c.getTime());
}
}
}
JAVA中组建与控件的区别是什么?
一般把Control翻译成控件,把Component翻译成组件。
控件就是具有用户界面的组件。要说的具体一点,就得回顾早期 Windows 的历史根源,当时控件指任何子窗口——按钮、列表框、编辑框或者某个对话框中的静态文本。从概念上讲,这些窗口——控件——类似用来操作收音机或小电器的旋钮和按钮。随着控件数量的增加(组合框、日期时间控件等等),控件逐渐成为子窗口的代名词,无论是用在对话框中还是用在其它种类的主窗口中。没过多久 BASIC 程序员开始编写他们自己专用的控件,自然而然地人们便想到共享这些控件。共享代码的方法之一是通过磁盘拷贝,但那样显然效率低下。必须要有一种机制使开发者建立的控件能够在其它程序员的应用中轻而易举地插入,这便是VBA控件,OLE控件,OCX和最后ActiveX 控件的动机。
这就是控件和组件之间产生混淆之所在。因为为了解决控件的可复用问题,所有这些技术必须首先解决更为一般的组件重用问题。(COM,如果你还记得它的话,意思是组件对象模型)。在软件行话中,组件这个术语指任何可复用的对象或任何可与其它对象交互的代码体。子程序的发明,曾经一度成为程序员趋之若鹜的软件工程圣杯:一种统一的编程理论,它使程序员从基本构建块——也就是用所选语言编写的各种组件建立大型系统。从子程序演变到OOP,到DLLs,再到COM,再到.NET框架的每一种新的编程范例都代表了一种不同的提供可重用性的方案。VBX使用DLLs的固化名称。COM使用接口和IUnknown。.NET框架使用微软的中间语言(MSIL)层和公共语言运行时(CLR)来提供统一的粘合。
因此,控件是组件的一个主要样本(并且历史上曾驱动着组件的开发),控件又不仅仅是唯一的一种组件。组件不需要显示任何信息或用户界面。组件可能实现科学计算,收集性能数据,计算1971年1月1日到现在的毫秒数,仰或是读取布什总统竞选活动保险箱里的美金数。
控件和组件
java的容器控件有哪些
1.顶层容器
什么是顶层容器?当我们使用Java进行图形编程的时候,图在哪里绘制呢?我们需要一个能够提供图形绘制的容器,这个容器就被称为顶层容器,你
也可以把它想象成一个窗口。顶层容器是进行图形编程的基础,一切图形化的东西,都必然包括在顶层容器中。在Swing中,我们有三种可以使用的顶层容器,
它们分别是:
JFrame:用来设计类似于Windows系统中的窗口形式的应用程序。
JDialog:和JFrame类似,只不过JDialog是用来设计对话框。
JApplet:用来设计可以在嵌入在网页中的Java小程序。
如果需要使用Swing制作一个窗口类程序,我们的代码看起来应该是这样:
import javax.swing.*;
public class KyodaiUI
extends JFrame {
……
}
2.控件
控件是构成应用程序界面的基本元素,按钮、文本框、进度条等,这些都是控件。控件(这里我们只讨论可视化控件)又可以分为容器控件和非容器控件。从字面
意义上来理解,容器控件就是能包含其他控件的特殊控件,例如,Java中的JPanel控件就属于容器型控件,我们可以在JPanel中放置按钮、文本框
等非容器控件,你甚至可以在JPanel中再放置若干个JPanel控件(值得注意的是,顶层容器也是容器型控件,每一个窗口应用程序中有且只能有一个顶
层容器控件,换句话说,顶层容器不能包括在其他的控件中)。
Java中的容器控件有很多,除刚才提到的JPanel外,还有
JTabbedPane、JScrollPane等,非容器控件有JButton、JLabel、JTextField等。如果你需要向某个容器型的控件
中添加控件,你可以使用 add(Component comp) 方法来实现,如:
JPanel panel = new JPanel();
JButton button = new JButton();
panel.add(button);
3.边框
虽然我们使用了不同前景色来区别不同的区域,然而却没有层次感,加上边框一定会漂亮许多。
在Java中,所有以J打头的Swing控件都可以使用setBorder方法来为自己设置边框。边框有很多种,线型、凸起、凹下、空的,你甚至可以自
怎样自己做一个java控件
就写一个没有主函数的类不就可以了,一个实现显示文字的方法,一个实现显示图像的方法,然后在另一个类中调用,可以创建一个button,然后实现它的监听,然后执行那个类中的某个方法不就可以了,awt和swing没怎么学,写不出来
!!
怎样在Java中美化按钮控件显得美观?
Java ( Eclipse )环境下, Button 样式问题解释如下:\x0d\x0a在jframe中的button样式是不可以随意改变的设置好了就是固定的样式。\x0d\x0a样式设置如下:\x0d\x0a1、对JButton大小的设置 \x0d\x0a因为JButen是属于小器件类型的,所以一般的setSize不能对其惊醒大小的设置,所以一般我们用\x0d\x0abutton.setPreferredSize(new Dimension(30,30)); //(30,30) 是你要设置按钮的大小 \x0d\x0a2、对JButton透明的设置 \x0d\x0a按钮设置为透明,这样就不会挡着后面的背景 \x0d\x0abutton.setContentAreaFilled(false); \x0d\x0a3、对JButton去掉按钮的边框的设置 \x0d\x0a如果有时候你的按钮不需要边框因为边框影响美观或者是因为你需要的是点击之前按钮呈现 普通图标形式,点击之后才有各种效果的话就可以用这种方法去掉边框 \x0d\x0abutton.setBorderPainted(false); \x0d\x0a4、对JButton添加图标呢的设置 // 实例化一个图标对象 \x0d\x0aImageIcon image = new ImageIcon(icons[i]); // 实例化按钮对象,并且设置按钮上显示图片 \x0d\x0aJButton button = new JButton(image); ——或者 \x0d\x0abutton.setIcon(new ImageIcon(getClass().getResource("qq.png"))); //qq.png是你要添加的图片 \x0d\x0a5、让按钮随按钮上的图案变化 butten.setMargin(new Insets(0,0,0,0)); \x0d\x0a6、设置凸起来的按钮,很多其他的swing也可用此方法 \x0d\x0abutten.setBorder(BorderFactory.createRaisedBevelBorder()); \x0d\x0a7、设置凹起来的按钮,很多其他的swing也可用此方法 \x0d\x0a button.setBorder(BorderFactory.createLoweredBevelBorder()); \x0d\x0a8、设置按钮的前景色和背景色 \x0d\x0a button .setFont(new java.awt.Font("华文行楷", 1, 15)); \x0d\x0a button.setBackground(Color.green); \x0d\x0a9、改变按钮的样式 \x0d\x0a UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); \x0d\x0aJFrame可以理解成一个容器,既然是容器就可以装东西。JButton就属于容器里面的东西,比如说是鱼。如果鱼离开了水,是无法生存的,这就可以类比JButtion必须放到JFrame上面才能进行添加。\x0d\x0aJAVA Swing中JFrame代表容易,JPane代表面板或者画布,可以在上面添加按钮、对话框、输入框等。