javaswing教程,用JAVA编写代码,实现一个窗口,窗口上有“姓名”“性别”“年龄”等标签,标签后分别对应3个文本框。
javaswing教程,用JAVA编写代码,实现一个窗口,窗口上有“姓名”“性别”“年龄”等标签,标签后分别对应3个文本框。详细介绍
本文目录一览: 利用 Java Swing 实现游戏开发
Swing初体验 对于想学习Swing编程的朋友 我们特地为大家准备了一些小窍门 首先 下载并阅读代码是极有必要的 由于这是一篇关于Swing的教程 所以 我们只是尽可能讲解一些与Swing有关的内容 与Swing无关的内容一般不会涉及 例如算法部分 其次 受篇幅限制 也不可能在这里将每部分代码都写得完完整整的 所以 大家也需要对照完整代码来看 最后 为了使大家更容易把精力集中在Swing学习上 我们也将游戏开发中所需资源放在下载文件中 大家下载后便能够编译运行 看到执行结果 (下载游戏源文件) 顶层容器 什么是顶层容器?当我们使用Java进行图形编程的时候 图在哪里绘制呢?我们需要一个能够提供图形绘制的容器 这个容器就被称为顶层容器 你也可以把它想象成一个窗口 顶层容器是进行图形编程的基础 一切图形化的东西 都必然包括在顶层容器中 在Swing中 我们有三种可以使用的顶层容器 它们分别是: JFrame:用来设计类似于Windows系统中的窗口形式的应用程序 JDialog:和JFrame类似 只不过JDialog是用来设计对话框 JApplet:用来设计可以在嵌入在网页中的Java小程序 如果需要使用Swing制作一个窗口类程序 我们的代码看起来应该是这样: import javax swing *; public class KyodaiUI extends JFrame { …… } 控件 控件是构成应用程序界面的基本元素 按钮 文本框 进度条等 这些都是控件 控件(这里我们只讨论可视化控件)又可以分为容器控件和非容器控件 从字面意义上来理解 容器控件就是能包含其他控件的特殊控件 例如 Java中的JPanel控件就属于容器型控件 我们可以在JPanel中放置按钮 文本框等非容器控件 你甚至可以在JPanel中再放置若干个JPanel控件(值得注意的是 顶层容器也是容器型控件 每一个窗口应用程序中有且只能有一个顶层容器控件 换句话说 顶层容器不能包括在其他的控件中) Java中的容器控件有很多 除刚才提到的JPanel外 还有JTabbedPane JScrollPane等 非容器控件有JButton JLabel JTextField等 如果你需要向某个容器型的控件中添加控件 你可以使用 add(Component p) 方法来实现 如: JPanel panel = new JPanel(); JButton button = new JButton(); panel add(button); 布局 什么是布局?布局是Java中用来控制控件排列位置的一种界面管理系统 使用过其他可视化编程开发语言的人在初次接触Java界面设计时 总会感觉到Java界面设计很别扭:居然没有提供所见即所得的设置控件坐标的方法!然而 事实证明 Java本身提供的布局管理系统也一样能够出色地完成我们的需要 而且在跨平台时表现得更有优势 常用的布局有: BorderLayout:将界面分割为上下左右以及中间一块区域的管理系统 在BorderLayout布局中 最多你只能放 个控件 如果超过 个控件 建议还是选用其他的布局系统吧 GridLayout:GridLayout是将用户界面切割为棋盘一样的布局管理系统 如果我们要设计一个类似于Windows中自带的计算器软件 GridLayout无疑是最佳选择 FlowLayout:FlowLayout与上述两类布局管理系统不太一样 在FlowLayout中 你不必指定每个控件放在哪 你只需要把控件加入到FlowLayout中 FlowLayout就会根据你添加控件的顺序依次放置控件 如果空间不够 会自动换行 在对这几个布局管理系统有了基本认识后 我们就一起来进入界面设计吧 在仔细观察了QQ游戏中 连连看 的设定后 我们可以发现 整个界面分为三个区 顶部是系统菜单区 占地面积最大的是用户游戏区 另外还有一个用户交互区 每个区域中都由若干控件组成 这么多控件 我们从哪开始入手呢?由于容器控件中可以放置其他控件 因此 我们只需要先确定放置的容器控件就可以了 既然已经知道需要使用容器控件的个数 接下来让我们就进入布局管理系统的选择 用GridLayout?似乎有点勉强 用FlowLayout?还有更好的选择吗?对了 我想你一定想到了是BorderLayout吧 如下图 所示 动手之前 大家一定要注意的是 界面的设计要先考虑好尺寸 不管是主程序界面的大小还是每个区域的大小 如果没有设计好合适的尺寸 将来改动起来会十分痛苦 下面便是相应的源程序: import java awt *; import javax swing *; public class KyodaiUI extends JFrame { public KyodaiUI() { this setSize( ); //将窗体的大小设定为 * this setDefaultCloseOperation(JFrame EXIT_ON_CLOSE); this setResizable(false); //窗体不能改变大小 this setTitle( 连连看 ); //设置标题 JPanel toolBar = new JPanel(); toolBar setBackground(Color white); toolBar setPreferredSize(new Dimension( )); JPanel actionPanel = new JPanel(); //新建JPanel型的控件 actionPanel setBackground(Color yellow); //设置背景色 actionPanel setPreferredSize(new Dimension( )); //设置大小 JPanel contentPanel = new JPanel(); contentPanel setBackground(Color blue); contentPanel setPreferredSize(new Dimension( )); this getContentPane() add(toolBar BorderLayout NORTH); this getContentPane() add(actionPanel BorderLayout EAST); this getContentPane() add(contentPanel BorderLayout CENTER); } public static void main(String[] args) throws HeadlessException { KyodaiUI kyodaiUI = new KyodaiUI(); kyodaiUI show(); } } 让我们来看看上面这段程序是如何运行的 首先 extends JFrame表明了这是从JFrame中继承过来的 JFrame是最基本的顶层容器控件 实际上 在JDK中 以字母J打头的控件都是Swing控件 然后设置了容器的属性 其中 setDefaultCloseOperation(JFrame EXIT_ON_CLOSE)是用来告诉Java虚拟机 当用户点击窗体右上角的 关闭 按钮时 关闭该窗口进程 如果不这么做的话 你会发现虽然你可以点将窗口关闭 然而程序却没有退出 在接下来的代码中 我们为顶层容器添加了三个Panel容器 要注意的是 在AWT中 我们可以直接写为add(toolBar BorderLayout NORTH) 而在 Swing 中却一定要写成getContentPane() add(toolBar BorderLayout NORTH) 否则程序就会出错 现在大家可以放在编译运行看看 是不是和我的运行结果一样(见图 )? 边框 虽然我们使用了不同前景色来区别不同的区域 然而却没有层次感 加上边框一定会漂亮许多 在Java中 所有以J打头的Swing控件都可以使用setBorder方法来为自己设置边框 边框有很多种 线型 凸起 凹下 空的 你甚至可以自由组合形成个人风格 所有的Border都必须使用javax swing BorderFactory中提供的静态方法来创建 比如: Border border = BorderFactory createBevelBorder(BevelBorder LOWERED new Color( ) new Color( ) new Color( ) new Color( )); 现在 我们将toolBar setBackground(Color white)改为toolBar setBorder(border) 立体效果是不是已经出现了? 实战??写上自己的大名 现在我们已经有了一个能够运行的界面了 虽然它什么也做不了 但是请你别慌 罗马不是一天建成的 现在让我们在菜单区提供一个 关于 菜单 用来显示程序的信息 难道你不想让别人知道你的大名吗?Swing本身就提供了现成的按钮控件JButton 我们只需要创建一个新的按钮:JButton about = new JButton( 关于 );这个按钮该怎么放到菜单区而不是别的地方呢?我们可以加入下面的代码:toolBar add(about);咦 怎么点按钮没有反应?这是因为你还没有告诉程序点击按钮时要做什么事情呢 要为按钮添加事件响应 首先需要使用about addActionListener(this)来告诉程序监听按钮按下时的事件 由于ActionListener是一个程序接口 因此 我们在类的申明的地方也得做一点小小的修改:public class KyodaiUI extends JFrame implements ActionListener { }实现ActionListener接口是为了告诉程序我要进行事件处理了 当然 最后我们得添加响应事件的代码: public void actionPerformed(ActionEvent e) { if (e getSource() == about) { JOptionPane showMessageDialog(this 我的大名 关于 JOptionPane INFORMATION_MESSAGE); return ; } } 其中 e getSource() 表示当前触发事件的控件 由于我们的程序中往往会有多个以上的控件 这些控件都有可能产生事件 所以我们必须使用这个方法来找到产生事情的控件 小结 让我们一起来回顾一下今天所学的内容:首先我们了解了顶层容器 也知道了控件分为容器控件和非容器控件 同时还知道使用边框 最后 我们还小小的处理了一下按钮的事件 学而时习之 不亦说乎 就让我留点小小的作业 帮助大家巩固一下今天所学的内容:上面我们添加的按钮在菜单栏的中间 并不美观 lishixinzhi/Article/program/Java/hx/201311/25907
java swing程序怎么运行?
import java.awt.*;import javax.swing.*;public class GUI extends JFrame{ private JMenuBar mb=new JMenuBar(); private JMenu mm=new JMenu("文件"); private JMenuItem mi1=new JMenuItem("粘贴"); private JMenuItem mi2=new JMenuItem("复制"); private JLabel l=new JLabel(); public GUI(){ this.setLayout(null); mm.add(mi1); mm.add(mi2); mb.add(mm); this.setJMenuBar(mb); l.setText("我的第一个图形用户界面"); l.setBounds(10,10,450,30); this.getContentPane().add(l); this.setBounds(330,250,500,150); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args){ new GUI(); }}
java swing中按钮的颜色要怎么设置
public class Demo { public static void main(String args[]) throws IOException { ButtonDemo demo = new ButtonDemo(); demo.view(); }}class ButtonDemo extends JFrame { private static final long serialVersionUID = 1L; public void view() { JPanel panel = new JPanel(); Button button = new Button("ok"); button.setBackground(Color.RED); // 设置颜色 panel.add(button); add(panel); setSize(200, 200); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); }}
1.1 olor
1.1.1 new Color(red, green,blue);
red, green,blue: 0~255
swing基础概念教程:
java的swing组件的使用
这些直接看对应JDK版本的java doc里面关于swing的部分,有很详细的索引页和每种控件的使用方法,还有jdk自己的一些sample。
这个oracle网站有教程
Swing是用于图形用户界面开发的一个全面解决方案,包括250多个类,在这里不能一一列出。本书仅使用Swing用户界面。
1.标 签 2.按 钮 3.文本域 4.文本区 5.列表框 6.组合框
7.复选框 8.单选按钮 9.滚动条 10.选项卡 11.对话框 12.菜 单
1.标 签
标签类JLabel是用于显示文字或图标的简单组件。JLabel的构造方法包括:
public JLabel()
public JLabel(Icon icon)
public JLabel(Icon icon, int horizontalAlignment)
public JLabel(String text)
public JLabel(String text, Icon icon, int horizontalAlignment)
public JLabel(String text, int horizontalAlignment)
在构造方法中,text指定标签的文字,icon指定标签的图标,horizontalAlignment指定文本或图标的水平对齐方式。
JLabel实例维护的属性包括:
表8.3 JLabel的属性 属性名
数据类型
访问
缺省值
disabledIcon
Icon
SG
灰色过滤图标
displayedMnemonic
Int
SG
——
horizontalAlignment
Int
CSG
LEFT
horizontalTextPosition
Int
SG
RIGHT
Icon
Icon
CSG
null
iconTextGap
Int
SG
4个像素
labelFor
Component
SG
null
Text
String
CSG
“”
verticalAlignment
Int
SG
CENTER
verticalTextPosition
int
SG
CENTER
注:在访问中,C=可在构造时设置/G=获取方法/S=设置方法
disabledIcon:标签被禁用时显示的图标。
displayedMnemonic:设置LabelFor属性后显示的助记符。
horizontalAlignment:标签内容的水平对齐方式。取值包括:SwingConstants.LEFT、SwingConstants.RIGHT和SwingConstants.CENTER。
horizontalTextPosition:文本相对于图标的水平位置;与水平对齐方式的有效值相同。
icon:标签在启用时显示的图标。
iconTextGap:标签的文本与图标之间的间隙,以像素点为单位。
labelFor:一个组件,它在标签的助记符被键入时获得焦点。
Text:标签显示的文本。
verticalAlignment:标签内容的垂直对齐方式。取值包括:SwingConstants.TOP、SwingConstants.BOTTOM和SwingConstants.CENTER。
JAVA Swing 如何将JTable的内容显示在当前的界面上面,而不是新创建一个窗口来显示?
希望这个代码对你有帮助!:
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableModelTest extends JFrame {
private JTable table;
private AbstractTableModel myModel;
public TableModelTest(){
myModel=new MyTableModel();
table=new JTable(myModel);
JScrollPane jsp=new JScrollPane(table);
Container cp=getContentPane();
cp.add(jsp,BorderLayout.CENTER);
}
public static void main(String[] args) {
TableModelTest tmt=new TableModelTest();
tmt.setTitle("表模型测试");
tmt.setSize(800,600);
tmt.setVisible(true);
}
}
class MyTableModel extends AbstractTableModel{
Object[][] rowData={
{"e01","郭旭东","男","1986-5-26","5000","d01"},
{"e01","郭旭东","男","1986-5-26","5000","d01"},
{"e01","郭旭东","男","1986-5-26","5000","d01"},
{"e01","郭旭东","男","1986-5-26","5000","d01"},
};
String[] columnName={"职工工号","职工姓名","性别","出生年月","工资","部门编号"};
public int getRowCount(){
return rowData.length;
}
public int getColumnCount(){
return rowData[0].length;
}
public String getColumnName(int c){
return columnName[c];
}
public Object getValueAt(int row,int column){
return rowData[row][column];
}
}
可以添加一个新的JPanel,然后在根据不同的用途调用设置不同的控件,这样就不用新建那么多界面了,一个就能够完成所有的功能!使用的时候就像windows下的不同选项卡一样,但是还是公用同一个窗口!
package com.gxa.Export;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.gxa.Main.Main;
import com.gxa.Pub.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class ExportSelectPanel implements ActionListener{
JPanel pSelect;
JComboBox cb;
JTextField tfd;
JLabel lb;
JButton btn1,btn2;
public void actionPerformed(ActionEvent e) {
Object btn = e.getSource();
PreparedStatement prep = null;
ResultSet rs;
if(btn==cb && cb.getSelectedItem().equals("入库日期")){
pSelect.add(lb);
}
if(btn==btn1){
Object cbName = cb.getSelectedItem();
String[] col = { "iExportId", "cEmployeeId", "dShipmentDate",
"cGoodId", "mPrice", "iAmount", "cStorageCode" };
DefaultTableModel mm = new DefaultTableModel(col, 0); // 定义一个表的模板
String str = tfd.getText();
try{
Connection conn = Conn.getCon().con;
if(tfd.getText().length()==0){
prep = conn.prepareStatement("select * from Export");
}
else if(cbName.equals("入库单号")){
prep = conn.prepareStatement("select * from Export where iExportId= ?");
prep.setString(1,str);
if(str.equals("")){
JOptionPane.showMessageDialog(ExportMainPanel.getExportMainPanel(), "请输入入库单号!");
return;
}else if(!str.matches("^\\d+$")){
JOptionPane.showMessageDialog(ExportMainPanel.getExportMainPanel(), "入库单号只能为数字!");
return;
}
}
else if(cbName.equals("经手人ID")){
prep = conn.prepareStatement("select * from Export where cEmployeeId= ?");
prep.setString(1,str);
if(str.equals("")){
JOptionPane.showMessageDialog(ExportMainPanel.getExportMainPanel(), "请输入经手人!");
return;
}else if(!str.matches("^\\d+$")){
JOptionPane.showMessageDialog(ExportMainPanel.getExportMainPanel(), "经手人只能为数字!");
return;
}
}
else if(cbName.equals("入库日期")){
prep = conn.prepareStatement("select * from Export where dShipmentDate = '"+str+"'");
}
else if(cbName.equals("货品编号")){
prep = conn.prepareStatement("select * from Export where cCommodityId= ?");
prep.setString(1,str);
if(str.equals("")){
JOptionPane.showMessageDialog(ExportMainPanel.getExportMainPanel(), "请输入货品编号!");
return;
}else if(!str.matches("^\\d+$")){
JOptionPane.showMessageDialog(ExportMainPanel.getExportMainPanel(), "货品编号只能为数字!");
return;
}
}
else if(cbName.equals("仓库编号")){
prep = conn.prepareStatement("select * from Export where cStorageCode= ?");
prep.setString(1,str);
if(str.equals("")){
JOptionPane.showMessageDialog(ExportMainPanel.getExportMainPanel(), "请输入仓库编号!");
return;
}else if(!str.matches("^\\d+$")){
JOptionPane.showMessageDialog(ExportMainPanel.getExportMainPanel(), "仓库编号只能为数字!");
return;
}
}
rs = prep.executeQuery();// 将查询得到的结果集给rs
while (rs.next()) {
String iExportId = rs.getString(1);
String cEmployeeId = rs.getString(2);
String dShipmentDate = rs.getString(3);
String cCommodityId = rs.getString(4);
String mPrice = rs.getString(5);
String iAmount = rs.getString(6);
String cStorageCode = rs.getString(7);
String[] str_row = { iExportId, cEmployeeId, dShipmentDate,
cCommodityId, mPrice, iAmount, cStorageCode }; // 将一行的数据存在str_row
// 字符串数组里
mm.addRow(str_row);// 添加在表模板中
}
rs.close();
prep.close();
ExportMainPanel.getExportMainPanel().jtable.setModel(mm);
ExportMainPanel.getExportMainPanel().scp.add(ExportMainPanel.getExportMainPanel().jscrollpane);
// 将加载了表的滚动条在JFrame中显示
}catch(Exception ee){
ee.printStackTrace();
}
}
if(btn==btn2){
Main.getMain().setVisible(true);
ExportMainPanel.getExportMainPanel().setVisible(false);
}
}
public ExportSelectPanel(){
cb = new JComboBox();
tfd = new JTextField(10);
lb = new JLabel("日期格式2008-01-01 00:00:00");
pSelect = new JPanel();
btn1 = new JButton("确定查询");
btn2 = new JButton("返回主界面");
cb.addItem("入库单号");
cb.addItem("经手人ID");
cb.addItem("入库日期");
cb.addItem("货品编号");
cb.addItem("仓库编号");
cb.addActionListener(this);
btn1.addActionListener(this);
btn2.addActionListener(this);
pSelect.add(cb);
pSelect.add(tfd);
pSelect.add(btn1);
pSelect.add(btn2);
}
}
希望这段代码可以帮到你
Java + Swing 输入提示
JOptionPane.showConfirmDialog (null, "本文档正在打印。允许要打印吗?", "友情提示", JOptionPane.YES_NO_OPTION);
1. 来看看这个: 这是不是很难给它自己,顺便说一句.a对夫妇的监听器和自定义渲染,瞧的。
2. 你可以创建自己的:import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
final JTextField textFieldA = new HintTextField("A hint here");
final JTextField textFieldB = new HintTextField("Another hint here");
frame.add(textFieldA, BorderLayout.NORTH);
frame.add(textFieldB, BorderLayout.CENTER);
JButton btnGetText = new JButton("Get text");
btnGetText.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String message = String.format("textFieldA='%s', textFieldB='%s'",
textFieldA.getText(), textFieldB.getText());
JOptionPane.showMessageDialog(frame, message);
}
});
frame.add(btnGetText, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.pack();
}
}
class HintTextField extends JTextField implements FocusListener {
private final String hint;
private boolean showingHint;
public HintTextField(final String hint) {
super(hint);
this.hint = hint;
this.showingHint = true;
super.addFocusListener(this);
}
@Override
public void focusGained(FocusEvent e) {
if(this.getText().isEmpty()) {
super.setText("");
showingHint = false;
}
}
@Override
public void focusLost(FocusEvent e) {
if(this.getText().isEmpty()) {
super.setText(hint);
showingHint = true;
}
}
@Override
public String getText() {
return showingHint ? "" : super.getText();
}
}
如果你仍然在Java 1.5中,替换this.getText().isEmpty()同this.getText().length() == 0。
3. 下面是一个类的复制/粘贴的解决方案:import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.plaf.basic.BasicTextFieldUI;
import javax.swing.text.JTextComponent;
public class HintTextFieldUI extends BasicTextFieldUI implements FocusListener {
private String hint;
private boolean hideOnFocus;
private Color color;
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
repaint();
}
private void repaint() {
if(getComponent() != null) {
getComponent().repaint();
}
}
public boolean isHideOnFocus() {
return hideOnFocus;
}
public void setHideOnFocus(boolean hideOnFocus) {
this.hideOnFocus = hideOnFocus;
repaint();
}
public String getHint() {
return hint;
}
public void setHint(String hint) {
this.hint = hint;
repaint();
}
public HintTextFieldUI(String hint) {
this(hint,false);
}
public HintTextFieldUI(String hint, boolean hideOnFocus) {
this(hint,hideOnFocus, null);
}
public HintTextFieldUI(String hint, boolean hideOnFocus, Color color) {
this.hint = hint;
this.hideOnFocus = hideOnFocus;
this.color = color;
}
@Override
protected void paintSafely(Graphics g) {
super.paintSafely(g);
JTextComponent comp = getComponent();
if(hint!=null && comp.getText().length() == 0 && (!(hideOnFocus && comp.hasFocus()))){
if(color != null) {
g.setColor(color);
} else {
g.setColor(comp.getForeground().brighter().brighter().brighter());
}
int padding = (comp.getHeight() - comp.getFont().getSize())/2;
g.drawString(hint, 2, comp.getHeight()-padding-1);
}
}
@Override
public void focusGained(FocusEvent e) {
if(hideOnFocus) repaint();
}
@Override
public void focusLost(FocusEvent e) {
if(hideOnFocus) repaint();
}
@Override
protected void installListeners() {
super.installListeners();
getComponent().addFocusListener(this);
}
@Override
protected void uninstallListeners() {
super.uninstallListeners();
getComponent().removeFocusListener(this);
}
}
像这样使用它:TextField field = new JTextField();
field.setUI(new HintTextFieldUI("Search", true));
请注意,它是发生在protected void paintSafely(Graphics g)。
4. 对于任何(也就是,任何一个扩展JComponent的),你可以调用的setToolTipText(String)方法。 参考以下链接: 为的setToolTipText API “如何使用工具提示”教程
5. 如果您仍然寻找一个解决方案 CodeGo.net,这里有一个其他的答案(巴特Kiers和culmat),供大家参考:import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
public class HintTextField extends JTextField implements FocusListener
{
private String hint;
public HintTextField ()
{
this("");
}
public HintTextField(final String hint)
{
setHint(hint);
super.addFocusListener(this);
}
public void setHint(String hint)
{
this.hint = hint;
setUI(new HintTextFieldUI(hint, true));
//setText(this.hint);
}
public void focusGained(FocusEvent e)
{
if(this.getText().length() == 0)
{
super.setText("");
}
}
public void focusLost(FocusEvent e)
{
if(this.getText().length() == 0)
{
setHint(hint);
}
}
public String getText()
{
String typed = super.getText();
return typed.equals(hint)?"":typed;
}
}
class HintTextFieldUI extends javax.swing.plaf.basic.BasicTextFieldUI implements FocusListener
{
private String hint;
private boolean hideOnFocus;
private Color color;
public Color getColor()
{
return color;
}
public void setColor(Color color)
{
this.color = color;
repaint();
}
private void repaint()
{
if(getComponent() != null)
{
getComponent().repaint();
}
}
public boolean isHideOnFocus()
{
return hideOnFocus;
}
public void setHideOnFocus(boolean hideOnFocus)
{
this.hideOnFocus = hideOnFocus;
repaint();
}
public String getHint()
{
return hint;
}
public void setHint(String hint)
{
this.hint = hint;
repaint();
}
public HintTextFieldUI(String hint)
{
this(hint, false);
}
public HintTextFieldUI(String hint, boolean hideOnFocus)
{
this(hint, hideOnFocus, null);
}
public HintTextFieldUI(String hint, boolean hideOnFocus, Color color)
{
this.hint = hint;
this.hideOnFocus = hideOnFocus;
this.color = color;
}
protected void paintSafely(Graphics g)
{
super.paintSafely(g);
JTextComponent comp = getComponent();
if(hint != null && comp.getText().length() == 0 && (!(hideOnFocus && comp.hasFocus())))
{
if(color != null)
{
g.setColor(color);
}
else
{
g.setColor(Color.gray);
}
int padding = (comp.getHeight() - comp.getFont().getSize()) / 2;
g.drawString(hint, 5, comp.getHeight() - padding - 1);
}
}
public void focusGained(FocusEvent e)
{
if(hideOnFocus) repaint();
}
public void focusLost(FocusEvent e)
{
if(hideOnFocus) repaint();
}
protected void installListeners()
{
super.installListeners();
getComponent().addFocusListener(this);
}
protected void uninstallListeners()
{
super.uninstallListeners();
getComponent().removeFocusListener(this);
}
}
Usage:
HintTextField field = new HintTextField();
field.setHint("Here's a hint");
请问JAVA中的javax.swing.text.html.HTMLDocument及相关类怎样用
前几天刚解决一个这样的问题,今天怎么又有了。
//DrawOvalApplet.java
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JApplet;
public class DrawOvalApplet extends JApplet implements Runnable{
private long delay;//延时
private int d;//直径
private int maxD;//最大直径
private int[] centerpoint;//圆心位置
private Color color;//颜色
//初始化
@Override
public void init() {
try {
delay = Long.parseLong(getParameter("sleep"));//取得刷新值
} catch (NumberFormatException e) {
delay = 100;
}
d = 2;//直径从20开始
maxD = 150;//直径最大150
centerpoint = randomCenterPoint();
color = randomColor();
}
@Override
public void start() {
System.out.println("start...");
Thread timer = new Thread(this);
timer.start();
}
//画圆操作
private void p(){
Graphics g = getGraphics();
if(g!=null){
g.clearRect(0, 0, getSize().height, getSize().width);
Color c = g.getColor();
g.setColor(color);
int[] pos = getPosition();
g.drawOval(pos[0], pos[1], d, d);
g.setColor(c);
}
}
//
private int[] getPosition(){
return new int[]{centerpoint[0]-d/2, centerpoint[1]-d/2};
}
//随机圆心位置
private int[] randomCenterPoint(){
Dimension size = getSize();
Random r = new Random();
int x = r.nextInt((int)size.getWidth()-maxD/2);
int y = r.nextInt((int)size.getHeight()-maxD/2);
if(xmaxD/2) x = maxD/2;
if(ymaxD/2) y = maxD/2;
return new int[]{x,y};
}
//随机颜色
private Color randomColor(){
Random r = new Random();
return new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255));
}
public void run() {
while(true){
d+=4;//每次直径增大4
if(d=maxD){
d = 0;
centerpoint = randomCenterPoint();
color = randomColor();
}
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
}
p();
}
}
}
如何自学Java开发?怎么学
Java自学可以找就是线上培训课,这种学习方式需要依靠个人强烈的毅力和自制力才可以学成。因为人都是懒惰的,大部分的人都无法坚持。而线上课程基本是再一万以内,每一家的培训课程收费课程都是不一样的。
Java线上培训课程怎么选呢?注意以下两点:
一、试听课程
首先,试听课程现在很多机构都有试听课程,只是试听课程长度不同而已,一些机构的所谓试听课程甚至只在你去机构咨询时就让你听不到一节课,这就是试听课。有的学校是一年或两周左右,在这一段时间内,你完全有足够的时间来观察课堂教师的水平,整个班的生源水准会不会很差,一般是一到两周左右,这段时间你完全有足够的时间来观察授课教师的水平,整个班的生源水准会不会很差。当然,听试听课我也是建议大家先有一定基础再去听课,这样可以听出听课的好与坏。
二是、生源水平。
这种情况也是决定这个学校教学水平的另一大重点,每个人的教学水平差不多,一定是要比一个班里的教学水平高一些,大家有的已经可以自己敲出完整的代码了,这是个很重要的决定因素,每个人的教学水平都一样,一定要比一个班里的学生好得多。因此,找培训课程时最好找有入学考试的,至少要负责。
1.学习JAVA的原理
了解JAVA的原理,才有可能真正体会JAVA的一切,学习任何事情,只要能掌握原理,就会比较顺利。学习JAVA语言很简单,毕竟JAVA语言也只包含五十多个关键词(keyword)与几十个算符(operator),再加上JAVA语法(syntax)也很简单,所以一般人可以很快就学会JAVA语言。
2.学习对象导向的思维
学会了语言,并不代表就可以设计出好的对象导向系统架构。想要成为对象导向的专家,往往需要:
(1)多看相关的书;
(2)多观摩别人的程序;
(3)多写程序。
总之六个字——多看,多学,多练。
3.学习API
学会JAVA语言之后,还需要学会一些API才能写出有用的程序。JAVA的API非常多,必须规划好一个学习路径,才不会在浩瀚的API大海中迷失。 必备的API包括了:IO、New IO、Collection Framework、Network、RMI、JAXP等。
4.学习开发工具的用法
只用JDK,是很难写出大型程序的,所以通常程序员会使用JBuilder/VisualAge/ VisualCafe 等工具。
目前有很多的零基础小白,被Java的高薪和前景吸引了过来,都纷纷进军Java。选择了Java,当然就是要开始学习了,我相信有很多同学挺迷茫的,迷茫在于是选择培训班去培训呢,还是自己在家自学。接下来小编就先介绍如何自学Java开发?然后再比较自学Java开发和参加Java培训的区别在哪里?
一、如何自学Java开发?
为大家介绍一位自学的同学的经验,供你参考。
本人从自学Java开始,已经两年有余。现在到达的程度就是,敢接10W以内的项目,2个月内,再加一个美工就能把活完成得漂漂亮亮。
以上属于废话,接下来才是重点,完整的把Java学习路线给你说下。
1,HelloWord!
首先,学习如何把这个单词打印在控制台。这点成功能给你点信心和乐趣。当然,如果你不会,怎么办。
网上找教程。(点击文章阅读原文下载)边看边学,这是必须的,切记。主要先把J2SE的看完。按照顺序看,一定要认真的看,并且自己把视频归类:理论部分,操作部分。
这部分看完得2个月左右吧,按照每天10小时,每周6天的进度,刚刚开始会比较慢,不要怕,我那个时候就是在暑假的时候看的,没有女朋友,只能撸电脑了。哈哈!
2,俄罗斯方块!
上面的看完马上干这个,网上有教程,按照他上面的做,当然,自己改下颜色,造型什么的。大概3周左右吧!
好,通过以上大概3个月的时间,恭喜楼主,您已经入门了,但仍然是_丝,不过你马上就要被你们班的女神仰望了。
接下来的时间,看你分类的理论视频,边看边思考,这是什么,那是什么,这有什么作用,基本就是4W1H。
这个时候你大概懂了jdk,类型,变量,函数,IO,泛型,swing,反射,接口,实现,等等一堆"专业"词汇,但是这是不够的,让你的女神给你跪舔,你还要学习一门利器,利器——J2EE,哈哈,好像很高级的样子是吧!
放心吧,少年,你的高富帅哥哥们(譬如我辈等,已经给你制造了很多轮子,你只需要坐上来就能策马奔腾了)什么是J2EE,举个栗子,淘宝网就一个J2EE实现。虽然你的女神天天上淘宝,但是很快你就能上女神了。接下来告诉你怎么玩转J2EE。
1,简单说下,就是让你做一个网站出来,这个网站的内容是动态生成的,什么跟什么啊,我不解释,你自己上网查。
2,网上一样有教程,我这里给你说下,你要注意的一些事,也就是说,我只会给你interface,不会给你具体的implemention。
如下:
a,tomcat,你要知道这是什么,干什么用的,怎么用。
b,数据库(mysql),如上这是什么,干什么用的,怎么用。
c,jsp,..................................
d,servlet...........................
好了,就4个,老老实实学会我说的,看API,读reference。
当你读到一半的时候,就能秒杀一大片的同学基友了。
自学和培训学各有好处,我在这给大家详细的对比一下。
二、自学Java开发和Java培训的区别
自学Java开发:什么是自学?自学就是完全依靠自己去学。
比如说学Java,通过在网络上了解到学Java需要学Java基础,然后就去各大自学网站搜教程来学,或者买一堆书在家里啃,这个就叫做自学。完全依靠自己。
自学的好处是,不用投入过多资金,时间自由,想什么时候学就什么时候学。节奏自己掌控。
自学劣势在于,你需要耗费大量的时间,过程是网上搜到什么就按照上面说的去学什么,没有一个系统的规划,更不用提在过程中遇到问题及时的指引。效率也不会太高。
培训学Java开发:什么是培训学?培训学就是指花钱找一些懂技术有经验的人,来进行全程辅导式学习。
培训的好处是,有人系统的讲解课程,并且科学合理的规划课程设置,让你从浅入深,循序渐进的进步和提高,每走一步都有成就感。还有项目实战演练,老师随时指导解决问题,学完后就可以和企业直接无缝对接,和自学比,就业更有竞争力。
培训也有明显的劣势,就是需要你拿出一段时间集中进行学习,对时间上有进度的要求,另外需要支付一定的投资费用。
如果个人经济能力还可以的同学,你可以去选择去培训,在这个瞬息万变的时代,时间是最珍贵的成本,培训学习毕竟效率高,学的比自学好的多,集中在短时间内实现技能的大幅提升,尽快投入岗位拿高薪,怎么看都是划算的。
如何自学Java开发?你可以参照小编分享的经验进行学习,如果你想快速成长避免弯路建议参加Java培训,昆明北大青鸟Java培训免费体验营报名中,填写下面的表单即可获得免费学习Java的机会。
用JAVA编写代码,实现一个窗口,窗口上有“姓名”“性别”“年龄”等标签,标签后分别对应3个文本框。
这个是网格布局,教程在这里:http://www.java2s.com/CN/Tutorial/Java/0240__Swing/Usesa2columngrid.htm
下面是我改自教程的,实现了你的要求:
import java.awt.ComponentOrientation;
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class GridLayoutDemo {
public final static boolean RIGHT_TO_LEFT = false;
public static void addComponentsToPane(Container pane) {
if (RIGHT_TO_LEFT) {
pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
}
pane.setLayout(new GridLayout(0, 2));
pane.add(new JLabel("姓名"));
pane.add(new JTextField());
pane.add(new JLabel("性别"));
pane.add(new JTextField());
pane.add(new JLabel("年龄"));
pane.add(new JTextField());
}
public static void main(String[] args) {
JFrame frame = new JFrame("GridLayoutDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addComponentsToPane(frame.getContentPane());
frame.pack();
frame.setVisible(true);
}
}