当前位置:文档之家› 通过例子学习Swing组件

通过例子学习Swing组件

通过例子学习Swing组件
通过例子学习Swing组件

学习swing组件,主要有三个内容

一是组件的显示,二是对组件支持的事件进行侦听,三是是自定义组件

1. JFrame

JFrame是主窗口,它和JDialog,JApplet的地位并列。但是,一个JFrame可以添加JDialog和JApplet进去它的内容面板,而反过来就不行

下面来看JFrame的例子

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

public class JFrameDemo{

JFrame mainFrame;

public JFrameDemo() {

mainFrame = new JFrame ( "JFrameDemo Title" ); //创建一个JFrame

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );//设置关闭动作

mainFrame.setSize( 300,300 );//设置窗口大小

mainFrame.setLocationRelativeTo(null);//使窗口显示在屏幕中央

mainFrame.setVisible(true);

}

public static void main(String[] args)

{

new JFrameDemo();

}

}

2.JLabel

JLabel是一标签,在它的文本里嵌入html标签,可以简单实现一个超链接组件

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.io.*;

public class JLabelDemo

{

JFrame mainFrame;

JLabel simpleLabel;

JPanel pane

public JLabelDemo() {

mainFrame = new JFrame ( "JLabelDemo" );

pane=new JPanel(); //生成面板

simpleLabel = new JLabel ("百度搜索");//嵌入了html标签simpleLabel.addMouseListener( new MouseAdapter(){//添加鼠标事件侦听器,当单击标签时,打开网页

public void mouseClicked( MouseEvent e ){

try{

Runtime.getRuntime().exec("cmd /c start https://www.doczj.com/doc/241775764.html,");

ee.printStackTrace();

}

}

});

simpleLabel.setCursor( new Cursor(Cursor.HAND_CURSOR) );//设置手形鼠标

pane.add(simpleLabel);、、将标签添加到面板上

mainFrame.getContentPane().add(pane,BorderLayout.CENTER );//将面板添加到窗口中间位置

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

mainFrame.setSize(300,200);//设置窗口大小

mainFrame.setLocationRelativeTo(null); //使窗口显示在屏幕中央

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JLabelDemo();

}

}

3.JButton

JButton是一个按钮,它和JLabel一样的简单

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.io.*;

public class JButtonDemo

{

JFrame mainFrame;

JButton simpleButton;

JPanel pane;

public JButtonDemo() {

mainFrame = new JFrame ( "JButtonDemo" );

pane=new JPanel();

simpleButton = new JButton("百度搜索");

pane.add(simpleButton);

mainFrame.getContentPane().add(pane);

simpleButton.addActionListener( new ActionListener(){//添加动作侦听器,当按钮被按下时执行这

里的代码以打开网页

public void actionPerformed( ActionEvent e){

try{

Runtime.getRuntime().exec("cmd /c start https://www.doczj.com/doc/241775764.html,");

ee.printStackTrace();

}

}

});

simpleButton.setCursor( new Cursor(Cursor.HAND_CURSOR) );

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JButtonDemo();

}

}

4.JTextField

一个文本框

import javax.swing.*;

import java.awt.event.*;

public class JTextFieldDemo

{

JFrame mainFrame;

JTextField simpleTextField;

public JTextFieldDemo() {

mainFrame = new JFrame ( "JTextFieldDemo" );

simpleTextField = new JTextField(20);//构造宽度为20个字符的文本框

mainFrame.getContentPane().add( simpleTextField );

simpleTextField.addActionListener( new ActionListener(){//在输入字符后按回车执行行代码,在标准输出窗口输出它的内容

public void actionPerformed( ActionEvent e){

System.out.println( simpleTextField.getText() );

}

});

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JTextFieldDemo();

}

}

5.JTextArea

文本区域,与文本框不同的是它是多行的

Java代码

package blog.swing;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class JTextAreaDemo

{

JFrame mainFrame;

JTextArea simpleTextArea;

JButton appendButton;

public JTextAreaDemo() {

mainFrame = new JFrame ( "JTextAreaDemo" );

simpleTextArea = new JTextArea(10,20);//创建一个显示10行20列的文本域simpleTextArea.setLineWrap(true);//设置它自动换行

simpleTextArea.setWrapStyleWord(true);//设置它自动换行时根据单词换行,而不是根据字符appendButton = new JButton ("append text to the text area");

mainFrame.getContentPane().add( simpleTextArea,BorderLayout.PAGE_START ); mainFrame.getContentPane().add( appendButton,BorderLayout.PAGE_END ); appendButton.addActionListener( new ActionListener(){

public void actionPerformed( ActionEvent e){

simpleTextArea.append("button appended text here");

System.out.println( simpleTextArea.getText() );

}

});

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JTextAreaDemo();

}

}

package blog.swing;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class JTextAreaDemo

{

JFrame mainFrame;

JTextArea simpleTextArea;

JButton appendButton;

public JTextAreaDemo() {

mainFrame = new JFrame ( "JTextAreaDemo" );

simpleTextArea = new JTextArea(10,20);//创建一个显示10行20列的文本域simpleTextArea.setLineWrap(true);//设置它自动换行

simpleTextArea.setWrapStyleWord(true);//设置它自动换行时根据单词换行,而不是根据字符appendButton = new JButton ("append text to the text area");

mainFrame.getContentPane().add( simpleTextArea,BorderLayout.PAGE_START ); mainFrame.getContentPane().add( appendButton,BorderLayout.PAGE_END ); appendButton.addActionListener( new ActionListener(){

public void actionPerformed( ActionEvent e){

simpleTextArea.append("button appended text here");

System.out.println( simpleTextArea.getText() );

}

});

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JTextAreaDemo();

}

}

6.JPasswordField

Java代码

package blog.swing;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class JPasswordFieldDemo

{

JFrame mainFrame;

JPasswordField simplePasswordField;

public JPasswordFieldDemo() {

mainFrame = new JFrame ( "JPasswordFieldDemo" );

simplePasswordField = new JPasswordField(10);

simplePasswordField.setEchoChar('*');//设定要显示的字符

mainFrame.getContentPane().add( simplePasswordField ); simplePasswordField.addActionListener( new ActionListener(){//回车时执行的动作public void actionPerformed( ActionEvent e){

char[] input = simplePasswordField.getPassword();

for( char c : input )

System.out.print( c );

}

});

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JPasswordFieldDemo();

}

}

package blog.swing;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class JPasswordFieldDemo

{

JFrame mainFrame;

JPasswordField simplePasswordField;

public JPasswordFieldDemo() {

mainFrame = new JFrame ( "JPasswordFieldDemo" );

simplePasswordField = new JPasswordField(10);

simplePasswordField.setEchoChar('*');//设定要显示的字符

mainFrame.getContentPane().add( simplePasswordField ); simplePasswordField.addActionListener( new ActionListener(){//回车时执行的动作public void actionPerformed( ActionEvent e){

char[] input = simplePasswordField.getPassword();

for( char c : input )

System.out.print( c );

}

});

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JPasswordFieldDemo();

}

}

7.JPanel

一个面板.一般用作控制组件的布局.

Java代码

package blog.swing;

import javax.swing.*;

class JPanelDemo

{

JFrame mainFrame;

JPanel simplePanel;

JButton simpleButton;

JLabel simpleLabel;

public JPanelDemo() {

mainFrame = new JFrame ( "JPanelDemo" );

simplePanel = new JPanel();

simpleButton = new JButton ("button");

simpleLabel = new JLabel ("label");

simplePanel.add( simpleLabel );

simplePanel.add( simpleButton );

mainFrame.getContentPane().add( simplePanel );

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JPanelDemo();

}

}

package blog.swing;

import javax.swing.*;

class JPanelDemo

{

JFrame mainFrame;

JPanel simplePanel;

JButton simpleButton;

JLabel simpleLabel;

public JPanelDemo() {

mainFrame = new JFrame ( "JPanelDemo" );

simplePanel = new JPanel();

simpleButton = new JButton ("button");

simpleLabel = new JLabel ("label");

simplePanel.add( simpleLabel );

simplePanel.add( simpleButton );

mainFrame.getContentPane().add( simplePanel );

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JPanelDemo();

}

}

8.JCheckBox

复选框

Java代码

package blog.swing;

import javax.swing.*;

import java.awt.event.*;

class JCheckBoxDemo implements ItemListener

{

JFrame mainFrame;

JPanel mainPanel;

JCheckBox simpleCheckBox1;

JCheckBox simpleCheckBox2;

public JCheckBoxDemo() {

mainFrame = new JFrame ( "JCheckBoxDemo" );

mainPanel = new JPanel ();

simpleCheckBox1 = new JCheckBox("checkbox1"); simpleCheckBox1.setMnemonic('1');

simpleCheckBox1.addItemListener(this);

simpleCheckBox2 = new JCheckBox("checkbox2"); simpleCheckBox2.setMnemonic('2');

simpleCheckBox2.addItemListener(this);

mainPanel.add(simpleCheckBox1);

mainPanel.add(simpleCheckBox2);

mainFrame.getContentPane().add( mainPanel );

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public void itemStateChanged( ItemEvent e ){

JCheckBox cb = (JCheckBox)e.getSource();

if( cb== simpleCheckBox1 )

System.out.println( "simpleCheckBox1" );

else

System.out.println( "simpleCheckBox2" );

}

public static void main(String[] args)

{

new JCheckBoxDemo();

}

}

package blog.swing;

import javax.swing.*;

import java.awt.event.*;

class JCheckBoxDemo implements ItemListener

{

JFrame mainFrame;

JPanel mainPanel;

JCheckBox simpleCheckBox1;

JCheckBox simpleCheckBox2;

public JCheckBoxDemo() {

mainFrame = new JFrame ( "JCheckBoxDemo" );

mainPanel = new JPanel ();

simpleCheckBox1 = new JCheckBox("checkbox1");

simpleCheckBox1.setMnemonic('1');

simpleCheckBox1.addItemListener(this);

simpleCheckBox2 = new JCheckBox("checkbox2");

simpleCheckBox2.setMnemonic('2');

simpleCheckBox2.addItemListener(this);

mainPanel.add(simpleCheckBox1);

mainPanel.add(simpleCheckBox2);

mainFrame.getContentPane().add( mainPanel );

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public void itemStateChanged( ItemEvent e ){

JCheckBox cb = (JCheckBox)e.getSource();

if( cb== simpleCheckBox1 )

System.out.println( "simpleCheckBox1" );

else

System.out.println( "simpleCheckBox2" );

}

public static void main(String[] args)

{

new JCheckBoxDemo();

}

}

9.JRadioButton

单选按钮.单选按钮要用到ButtonGroup.添加到同一个ButtonGroup的单选按钮表示在它们之间只可选其一.不同ButtonGroup里的单选按钮相互之间的选择不受影响.

Java代码

package blog.swing;

import javax.swing.*;

import java.awt.event.*;

class JRadioButtonDemo implements ItemListener

{

JFrame mainFrame;

JPanel mainPanel;

ButtonGroup buttonGroup;

JRadioButton simpleRadioButton1;

JRadioButton simpleRadioButton2;

public JRadioButtonDemo() {

mainFrame = new JFrame ( "JRadioButtonDemo" );

mainPanel = new JPanel ();

simpleRadioButton1 = new JRadioButton("RadioButton1"); simpleRadioButton1.setMnemonic('1');

simpleRadioButton1.addItemListener(this);

simpleRadioButton2 = new JRadioButton("RadioButton2"); simpleRadioButton2.setMnemonic('2');

simpleRadioButton2.addItemListener(this);

buttonGroup = new ButtonGroup();

buttonGroup.add(simpleRadioButton1);

buttonGroup.add(simpleRadioButton2);

mainPanel.add(simpleRadioButton1);

mainPanel.add(simpleRadioButton2);

mainFrame.getContentPane().add( mainPanel );

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public void itemStateChanged( ItemEvent e ){

JRadioButton cb = (JRadioButton)e.getSource();

if( cb== simpleRadioButton1 )

System.out.println( "simpleRadioButton1" );

else

System.out.println( "simpleRadioButton2" );

}

public static void main(String[] args)

{

new JRadioButtonDemo();

}

}

package blog.swing;

import javax.swing.*;

import java.awt.event.*;

class JRadioButtonDemo implements ItemListener

{

JFrame mainFrame;

JPanel mainPanel;

ButtonGroup buttonGroup;

JRadioButton simpleRadioButton1;

JRadioButton simpleRadioButton2;

public JRadioButtonDemo() {

mainFrame = new JFrame ( "JRadioButtonDemo" );

mainPanel = new JPanel ();

simpleRadioButton1 = new JRadioButton("RadioButton1");

simpleRadioButton1.setMnemonic('1');

simpleRadioButton1.addItemListener(this);

simpleRadioButton2 = new JRadioButton("RadioButton2");

simpleRadioButton2.setMnemonic('2');

simpleRadioButton2.addItemListener(this);

buttonGroup = new ButtonGroup();

buttonGroup.add(simpleRadioButton1);

buttonGroup.add(simpleRadioButton2);

mainPanel.add(simpleRadioButton1);

mainPanel.add(simpleRadioButton2);

mainFrame.getContentPane().add( mainPanel );

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public void itemStateChanged( ItemEvent e ){

JRadioButton cb = (JRadioButton)e.getSource();

if( cb== simpleRadioButton1 )

System.out.println( "simpleRadioButton1" );

else

System.out.println( "simpleRadioButton2" );

}

public static void main(String[] args)

{

new JRadioButtonDemo();

}

}

10.JScrollPane

JScrollPane由四个角,两个头部,和一个视口组成.四个角和两个头部都是由Component组成.四个角并不是总是显示出来的.左上角只有当两个头部同时存在才显示,右下角只有两个滚动条同时出现才会出现.其他两个角可同理知道什么时候会出现.视口是显示内容的部分,由JViewport对象表示.而真正显示的内容,由JViewport的view表示

Java代码

package blog.swing;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class JScrollPaneDemo

{

JFrame mainFrame;

JScrollPane simpleScrollPane;

JTextArea simpleTextArea;

JButton changeViewport;

public JScrollPaneDemo() {

mainFrame = new JFrame ( "JScrollPaneDemo" );

simpleTextArea = new JTextArea(10,20);

simpleScrollPane = new JScrollPane( simpleTextArea );//创建一个滚动窗格,里面显示的内容是文本区域

simpleScrollPane.setRowHeaderView( new JLabel ("this is a row header") );//设置行标题simpleScrollPane.setColumnHeaderView( new JLabel ("this is a column header") );//设置列标题

simpleScrollPane.setCorner( JScrollPane.LOWER_RIGHT_CORNER,new JButton("corner") );//设置右下角

simpleScrollPane.setCorner( JScrollPane.UPPER_LEFT_CORNER,new JButton("corner") );//设置左上角

changeViewport = new JButton ("changeViewport");

changeViewport.addActionListener( new ActionListener(){//当单击按钮时,滚动窗口显示的内容变为另一个文本区域

public void actionPerformed( ActionEvent e){

simpleScrollPane.getViewport().setView( new JTextArea("changeViewpot") );

}

});

mainFrame.getContentPane().add( simpleScrollPane,BorderLayout.PAGE_START ); mainFrame.getContentPane().add( changeViewport,BorderLayout.PAGE_END ); mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JScrollPaneDemo();

}

}

package blog.swing;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class JScrollPaneDemo

{

JFrame mainFrame;

JScrollPane simpleScrollPane;

JTextArea simpleTextArea;

JButton changeViewport;

public JScrollPaneDemo() {

mainFrame = new JFrame ( "JScrollPaneDemo" );

simpleTextArea = new JTextArea(10,20);

simpleScrollPane = new JScrollPane( simpleTextArea );//创建一个滚动窗格,里面显示的内容是文本区域

simpleScrollPane.setRowHeaderView( new JLabel ("this is a row header") );//设置行标题simpleScrollPane.setColumnHeaderView( new JLabel ("this is a column header") );//设置列标题

simpleScrollPane.setCorner( JScrollPane.LOWER_RIGHT_CORNER,new JButton("corner") );//设置右下角

simpleScrollPane.setCorner( JScrollPane.UPPER_LEFT_CORNER,new JButton("corner") );//设置左上角

changeViewport = new JButton ("changeViewport");

changeViewport.addActionListener( new ActionListener(){//当单击按钮时,滚动窗口显示的内容变为另一个文本区域

public void actionPerformed( ActionEvent e){

simpleScrollPane.getViewport().setView( new JTextArea("changeViewpot") );

}

});

mainFrame.getContentPane().add( simpleScrollPane,BorderLayout.PAGE_START ); mainFrame.getContentPane().add( changeViewport,BorderLayout.PAGE_END ); mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JScrollPaneDemo();

}

}

现在开始讲相对复杂一点的组件

11.JList

JList是一个列表.这里将首次引入Model这个概念,中文翻译是模型,不好理解,其实就是数据的意思.JList用ListModel保存它的数据.简单应用可以用实现了ListModel的AbstraceListModel的子类DefaultListModel来保存它的数据(尽管它的名字有Default,但是只

有你使用了它创建JList,它才存在.即如果你没有用DefaultListModel创建JList,则你用getModel()返回的ListModel不能强制转换为DefaultListModel).

很多组件的Model都有这种结构,即XXXModel--AbstractXXXModel--DefaultXXXModel

下面讲一下DefaultListModel,它的方法基本上和V ector一样,另外添加了一个Object getElementAt(int index)

添加元素: void add(int index, Object element),void addElement(Object obj),void insertElementAt(Object obj, int index)

删除元素: Object remove(int index),boolean removeElement(Object obj),void removeElementAt(int index),

void removeAllElements(),void removeRange(int fromIndex, int toIndex),void clear()

查询元素: Object elementAt(int index),Object get(int index),Object getElementAt(int index), Object firstElement(),Object lastElement()

修改元素: Object set(int index, Object element),void setElementAt(Object obj, int index)

JList自身没有对单个元素处理的方法,只有void setListData(Object[] listData),void setListData(Vector listData),void setModel(ListModel model)

来设置全部元素的方法

当要对单个元素进行处理时,用ListModel getModel()返回Model后,再对Model操作

通过void addListDataListener(ListDataListener l)可以在ListModel被修改时被通知

和JList相关的还有ListSelectionModel,它管理JList的选择项.它没有AbstractListSelectionModel这个子类,而直接有一个DefaultListSelectionModel这个实现类, JList默认也是使用的这个实现类. 和上面讲的DefaultListModel不同,这个Model不用你自己创建就已存在.

通过void addListSelectionListener(ListSelectionListener x)可以在选择改变时被通知.

void setSelectionMode(int selectionMode)可以设置多选(待续或非连续)或是单选DefaultListSelectionModel没有返回选择了的元素的方法,它只负责去选择哪些项

修改选择项的方法:

void addSelectionInterval(int index0, int index1),

void removeSelectionInterval(int index0, int index1)

void setSelectionInterval(int index0, int index1)

void clearSelection()

下面这两个方法在ListModel被更改时更改选择项会更方便,因为不用根据ListModel的变动计算索引

void removeIndexInterval(int index0, int index1)

void insertIndexInterval(int index, int length, boolean before)

另外的一些方法

int getMaxSelectionIndex(),int getMinSelectionIndex()

boolean isSelectedIndex(int index),boolean isSelectionEmpty()

很多在DefaultListSelectionModel里的方法,在JList自身里也有.例如上面的XXXSelectionInnterval(...)和addListSelectionListener(...)

另外它还有:

int getSelectedIndex(),int[] getSelectedIndices()

Object getSelectedValue(), Object[] getSelectedValues()

void setSelectedIndex(int index),void setSelectedIndices(int[] indices)

void setSelectedValue(Object anObject, boolean shouldScroll)

最后一个内容是,自定义JList

默认JList显示的内容是String.在创建它的时候,如果你把其他非String的对象传给它要它显示,它会调用toString,然后显示返回的String.

通过void setCellRenderer(ListCellRenderer cellRenderer)可以自定义JList显示内容的类型.

参数是一个"渲染器".很多组件在自定义的时候都是用渲染器来实现的.它只一个方法: Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)

下面举例说明一下它如何工作:假设你调用了setCellRenderer,而且把"label"这个String传给JList要它显示.那么"label"这个值就会传给上面这个方法的value这个值.

这时你可以用"label"构造一个组件,然后返回.例如,你可以JLabel label = new JLabel( (String)value ); return label.这样,在JList就会显示一个JLabel了.

Java代码

package blog.swing;

import java.awt.*;

import javax.swing.event.*;

import javax.swing.*;

class JListCustomDemo

{

JFrame mainFrame;

JList simpleList;

public JListCustomDemo(){

mainFrame = new JFrame ("JListCustomDemo");

final DefaultListModel model = new DefaultListModel();

model.addElement("button1");

model.addElement("button2");

simpleList = new JList(model);

simpleList.setCellRenderer( new CustomListCellRenderer() );

simpleList.addListSelectionListener( new ListSelectionListener(){

public void valueChanged( ListSelectionEvent e){

System.out.println( model.getElementAt( simpleList.getSelectedIndex() ) );

}

});

mainFrame.add(simpleList);

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

mainFrame.setLocationRelativeTo(null);

mainFrame.pack();

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JListCustomDemo();

}

}

class CustomListCellRenderer implements ListCellRenderer{

public Component getListCellRendererComponent(

JList list,

Object value,

int index,

boolean isSelected,

boolean cellHasFocus

){

return new JButton( (String)value );

}

}

package blog.swing;

import java.awt.*;

import javax.swing.event.*;

import javax.swing.*;

class JListCustomDemo

{

JFrame mainFrame;

JList simpleList;

public JListCustomDemo(){

mainFrame = new JFrame ("JListCustomDemo");

final DefaultListModel model = new DefaultListModel();

model.addElement("button1");

model.addElement("button2");

simpleList = new JList(model);

simpleList.setCellRenderer( new CustomListCellRenderer() );

simpleList.addListSelectionListener( new ListSelectionListener(){

public void valueChanged( ListSelectionEvent e){

System.out.println( model.getElementAt( simpleList.getSelectedIndex() ) );

}

});

mainFrame.add(simpleList);

mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

mainFrame.setLocationRelativeTo(null);

mainFrame.pack();

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JListCustomDemo();

}

}

class CustomListCellRenderer implements ListCellRenderer{ public Component getListCellRendererComponent(

JList list,

Object value,

int index,

boolean isSelected,

boolean cellHasFocus

){

return new JButton( (String)value );

}

}

Java代码

package blog.swing;

import java.util.*;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class JListDemo

{

JFrame mainFrame;

JList simpleList;

JButton changeSelections;

public JListDemo() {

mainFrame = new JFrame ( "JListDemo" );

/* Vector listData = new Vector(); listData.add("data1");

listData.add("data2");

listData.add("data3");

listData.add("data4");

simpleList = new JList( listData );

*/

DefaultListModel dlm = new DefaultListModel();

dlm.addElement("data1");

dlm.addElement("data2");

dlm.addElement("data3");

dlm.addElement("data4");

simpleList = new JList( dlm );

changeSelections = new JButton ("changeSelections");

changeSelections.addActionListener( new ActionListener(){

public void actionPerformed( ActionEvent e){

DefaultListSelectionModel dlsm = (DefaultListSelectionModel)simpleList.getSelectionModel();

//dlsm.addSelectionInterval(0,1);

//dlsm.removeSelectionInterval(0,1);

dlsm.setSelectionInterval(0,1);

/* DefaultListModel dlm = (DefaultListModel)simpleList.getModel();

dlm.remove(0);

dlm.remove(1);

*/

}

});

mainFrame.getContentPane().add( simpleList,BorderLayout.PAGE_START );

mainFrame.getContentPane().add( changeSelections,BorderLayout.PAGE_END ); mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JListDemo();

}

}

package blog.swing;

import java.util.*;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class JListDemo

{

JFrame mainFrame;

JList simpleList;

JButton changeSelections;

public JListDemo() {

mainFrame = new JFrame ( "JListDemo" );

/* Vector listData = new Vector();

listData.add("data1");

listData.add("data2");

listData.add("data3");

listData.add("data4");

simpleList = new JList( listData );

*/

DefaultListModel dlm = new DefaultListModel();

dlm.addElement("data1");

dlm.addElement("data2");

dlm.addElement("data3");

dlm.addElement("data4");

simpleList = new JList( dlm );

changeSelections = new JButton ("changeSelections");

changeSelections.addActionListener( new ActionListener(){

public void actionPerformed( ActionEvent e){

DefaultListSelectionModel dlsm = (DefaultListSelectionModel)simpleList.getSelectionModel();

//dlsm.addSelectionInterval(0,1);

//dlsm.removeSelectionInterval(0,1);

dlsm.setSelectionInterval(0,1);

/* DefaultListModel dlm = (DefaultListModel)simpleList.getModel();

dlm.remove(0);

dlm.remove(1);

*/

}

});

mainFrame.getContentPane().add( simpleList,BorderLayout.PAGE_START );

mainFrame.getContentPane().add( changeSelections,BorderLayout.PAGE_END ); mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

mainFrame.pack();

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible( true );

}

public static void main(String[] args)

{

new JListDemo();

}

}

跟我学Java Swing GUI组件技术及应用实例——JTable表格组件及应用实例

1.1跟我学Java Swing GUI组件技术及应用实例——JTable表格组件及应用实例 1.1.1表格控件JTable 1、JTable表格控件的主要功能 JTable顾名思义就是一个将数据以表格显示的组件,它提供以行和列的方式来显示数据,并且可以拖动列。如下示图为应用JTable表格控件所创建出的数据表格。 JTable的数据选项不仅仅是可以显示字符串,还可以显示Checkbox选择框、下拉列表框或者图片等内容。如下为Sun 公司的Swing 教程中的TableDialogEditoDemo 应用程序的执行结果示图,在该示例的数据表格中显示Checkbox选择框、下拉列表框和图片等内容。

2、JTable类的API功能说明 (1)JTable类的API功能说明 如下示图为JDK API文档中对JTable类的API功能说明的相关信息。 如果需要对数据表格中的表头数据列和数据单元格中的数据列进行定制,则需要通过继承封装表头数据列JTableHeader类或者继承封装数据列的TableColumn类。如下为JTableHeader类和TableColumn类的功能说明。 (2)表头数据列JTableHeader类的功能说明

(3)数据列TableColumn类的功能说明 TableColumn 类封装表示JTable中数据列的所有属性,如宽度、大小可调整性、最小和最大宽度。 3、JTable表格控件中的数据可以以多种不同的方式被选中 (1)选中某一数据行

(2)选中连续的多行数据行

(3)选中不连续的多行数据行

4、JTable类的构造函数定义 可以通过JTable(Object[][] rowData, Object[] columnNames)形式的构造方法创建出数据表格组件,该JTable组件将用来显示一个二维数组rowData 中的值(它是一个行数组),其列名称为columnNames所代表的数组。JTable类的其它形式的构造函数定义如下:

java swing 组件大全

import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.tree.*; import javax.swing.event.*; import javax.swing.border.*; import javax.swing.table.*; /** * Swing 组件测试程序 * 测试Swing所有组件及其相应的事件 * @author 天翼.李 2003.4.17 晚23:14 * @link https://www.doczj.com/doc/241775764.html, * @link robococde@https://www.doczj.com/doc/241775764.html, */ public class SwingT est extends JFrame { /** * 主模块,初始化所有子模块,并设置主框架的相关属性 */ public SwingTest() { // 初始化所有模块 MenuTest menuTest = new MenuTest(); LeftPanel leftPanel = new LeftPanel(); RightPanel rightPanel = new RightPanel(); BottomPanel bottomPanel = new BottomPanel(); CenterPanel centerPanel = new CenterPanel(); // 设置主框架的布局 Container c = this.getContentPane(); // c.setLayout(new BorderLayout()) this.setJMenuBar(menuTest); c.add(leftPanel,BorderLayout.WEST); c.add(rightPanel,BorderLayout.EAST); c.add(centerPanel,BorderLayout.CENTER); c.add(bottomPanel,BorderLayout.SOUTH); // 利用无名内隐类,增加窗口事件 this.addWindowListener(new WindowAdapter() { public void WindowClosing(WindowEvent e)

java swing 好关系登录界面连接数据库代码

package com.kehuglxt.swing1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class Denglujdbc { //连接 Connection conn = null; //构造方法 public Connection getconn() { //连接时可能会出现异常所以要抛出异常 try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { // TODO: handle exception e.printStackTrace(); } //连接的数据库地址 String url = "jdbc:mysql://127.0.0.1:3306/shoping"; //用户名 String useName = "root"; //用户密码 String password = "admin"; try { //连接 conn = DriverManager.getConnection(url, useName, password); if (conn != null) { //打印输出测试一下能不能输出 //System.out.println("连接数据库成功"); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }

Swing的用法以及实例

Swing的用法以及实例 使用swing时首先要导入一些相关的包: 01//首先导入Swing 需要的包 02 import javax.swing.*; 03 import java.awt.*; 04 import java.awt.event.*; 05 //创建HelloWorld类 06 public class HelloWorld { 07 //创建主方法 08 public static void main(String[] args) { 09 try { //try语句块,监视该段程序 10 //设置窗口风格 11 UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 12 } catch (Exception e) { //捕获异常 13 e.printStackTrace(); //异常信息输出 14 } 15 JFrame frame = new JFrame("Swing 第一个示例");//创建顶层容器并初始化 16 Container c = frame.getContentPane(); //获取面板容器 17 JPanel pane = new JPanel(); //创建面板panel 并初始化 18 c.add(pane); //将面板添加到窗口 19 pane.setLayout(new FlowLayout()); //设置布局管理器FlowLayout 20 final JLabel label = new JLabel(); //创建标签label 并初始化 21 JButton button = new JButton("按钮"); //创建button 并初始化 22 pane.add(label); //向容器中添加组件label 23 pane.add(button); //向容器中添加组件button 24 //对按钮事件的处理方法 25 button.addActionListener(new ActionListener() { 26 public void actionPerformed(ActionEvent e) { 27 label.setText("HelloWorld!"); //设置label 显示的内容 28 } 29 }); 30 //窗口设置结束,开始显示 31 frame.addWindowListener(new Window 32 //匿名类用于注册监听器 33 public void windowClosing(WindowEvent e) { 34 System.exit(0);} //程序退出 35 }); 36 frame.setSize(300,240); //设置窗口大小 37 frame.setVisible(true); //显示窗口 38 } 39 } 以上程序中完全按照前面所介绍到的流程,首先是将Swing 所需要的包导入(第1~4 行,然后在主方法中创建顶层容器frame 并初始化(第15 行)。

(总结)Swing组件的使用

(总结)Swing组件的使用 Swing 的组件与AWT 组件相似,但又为每一个组件增添了新的方法,并提供了更多的高级组件.Swing 的基本组件:1.按钮(JButton): Swing 中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且还可以将多个图像指定给一个按钮。 (1).JButton 常用的构造方法。 JButton(String text):按钮上显示字符。 JButton(Icon icon) :按钮上显示图标。 JButton(String text, Icon icon):按钮上既显示图标又显示字符。 (2).常用方法: b1.setEnabled(false); //使按钮当前不可用 b1.setToolTipText("..."): //设置按钮提示文本 b1.setMnemonic(KeyEvent.VK_D);// 将b1邦定alt+D键(3).案例代码: [java] view plain copy print?public class JButtonExample3 extends JPanel implements ActionListener { protected JButton b1, b2, b3; public JButtonExample3() { ImageIcon

leftButtonIcon = createImageIcon("right.gif"); ImageIcon middleButtonIcon = createImageIcon("middle.gif"); ImageIcon rightButtonIcon = createImageIcon("left.gif"); b1 = new JButton("失效中间按钮(D)", leftButtonIcon); b1.setVerticalTextPosition(AbstractButton.CENTER);// 水平中间对齐 b1.setHorizontalTextPosition(AbstractButton.LEADING);// 相当于LEFT b1.setMnemonic(KeyEvent.VK_D);// 将b1邦定alt+D键b1.setActionCommand("disable"); b2 = new JButton("M中间按钮", middleButtonIcon); b2.setVerticalTextPosition(AbstractButton.BOTTOM); b2.setHorizontalTextPosition(AbstractButton.CENTER); b2.setMnemonic(KeyEvent.VK_M);// 将b2邦定alt+M键b3 = new JButton("E激活中间按钮", rightButtonIcon); b3.setMnemonic(KeyEvent.VK_E);// 将b3邦定alt+E键 b3.setActionCommand("enable"); b3.setEnabled(false); // 给1和3添加事件监听b1.addActionListener(this); b3.addActionListener(this); // 设置按钮提示文本b1.setToolTipText("点击这个按钮,

Java Swing-图形化界面-菜单组件

//菜单条、菜单、菜单项是窗口常用的组件,菜单放在菜单条里,菜单项放在菜单里/**JMenuBar菜单条 * JComponent类的子类JMenubar是负责创建菜单条的,即JMenuBar的一个实例就是一个菜单条。* JFrame类有一个将菜单条放置到窗口中的方法: * public void setJMenuBar(JMenuBar mmenubar); * 该方法将菜单条添加到窗口的菜单条区域(注意:只能向窗口添加一个菜单条)*/ /**JMenu菜单 * JComponent的子类JMenu是负责创建菜单的,即JMenu的一个实例就是一个菜单。 * JMenu类的主要方法: * JMenu(String s)-建立一个指定标题菜单,标题由参数s确定 *public void add(MenuItem item)----向菜单增加由参数item指定的菜单选择对象*public void add(String s)----向菜单增加指定的选项 *public JMenuItem getItem(int n)----得到指定索引处的菜单选项 *public int getItemCount()----得到菜单选项数目 */ /**JMenuItem菜单项 * JMenuItem是JMenu的父类,该类负责创建菜单项的,即JMenuItem的一个实例就是一个菜单项。菜单项放在菜单里。 * JMenuItem类的主要方法: * JMenuItem(String s)----构造有标题的菜单项 * JMenuItem(String text,Icon icon)----构造有标题和图标的菜单项 * public void setEnabled(boolean b)----设置当前菜单项是否可被选择 * public String getLabel()----得到菜单项的名字 * public void setAccelerator(KeyStroke keyStroke)----为菜单项设置快捷键 * 注:为向该方法的参数传递一个KeyStroke对象,可以使用KeyStroke类的类方法public static Keystroke * getKeyStroke(char keychar)返回一个KeyStroke对象;也可以使用KeyStroke类的类方法public static * Keystroke getKeyStroke(int keyCode,int modifiers)返回一个Keystroke对象,其中参数KeyCode的 * 取值范围为KeyEvent.VK_A~KeyEvent.VK_Z,modifiers的取值如下:InputEvent.ALT_MASK,* InputEvent.CTRL_MASK,InputEvent.SHIFT_MASK */ /**嵌入子菜单 * JMenu是JMenuItem的子类,因此菜单项本身还可以是一个菜单,这样的菜单项称为子菜单。为了使菜单项有一个图标,可以用图标 * 类Icon声明一个图标,然后使用其子类ImageIcon类创建一个图标,如: * Icon icon=new ImageIcon("dog.gif") */JMenu JMenu 10.3 菜单组件 2020年1月1日21:03 分区 十.图形用户界面设计 的第1 页

应用Java Swing GUI界面技术实现的Java JDBC数据库操作技术的应用实例

应用Java Swing GUI界面技术实现的Java JDBC数据库操作技术的应用实例 1.1.1问题 设计一个实现对下面的EBook数据库表进行CRUD-----“增(CREATE)、删(DELETE)、改(UPDATE)、查(READER)”操作的J2SE程序。物理数据库系统不限制,可以为MS SQLServer、MYSQL和Oracle等。 1.1.2本示例的源程序代码 1、DesktopApplication程序类的功能说明 实现对EBook数据库表进行CRUD-----“增(CREATE)、删(DELETE)、改(UPDATE)、查(READER)功能实现的基础上尝试了应用Java Swing GUI编程技术,理解了事件的监听机制的原理、桌面程序的布局等知识。 2、编程工具为NetBeans IDE 3、本示例的数据库为MySql数据库系统 4、本示例的源程序代码 import javax.swing.*; import javax.swing.table.*; import java.awt.*; import java.awt.event.*; import java.util.*; import java.sql.*; class Table extends JFrame implements ActionListener{ /*-------------------------------菜单栏的各项元素定义-----------------------*/ /*下拉菜单*/ private JMenuBar menubar;

private JMenu menu; private JMenuItem iselect,iinsert,idel,iupdate; /*插入时的输入框*/ private JTextField Tebook_id; private JTextField Tebook_name; private JTextField Tebook_kind; private JTextField Tebook_price; /*显示标签*/ private JLabel label_title; private JLabel label_id; private JLabel label_name; private JLabel label_kind; private JLabel label_price; private JLabel label_updateid; //显示更新的记录集号的标签 // 出错后的提示标签 private JLabel exception_interger=new JLabel("请输入数字!"); //提示出错为没有输入数字的标签 private JPanel panel; //面板 //private JTextArea textarea;//文本区域 private Container contrainer;//容器 private JButton insert_enter; // 插入确定按钮 private JButton del_enter; // 删除确定按钮 private JButton update_select_enter; // 更新选择按钮 private JButton update_detail_enter; // 更新确定按钮 //初始化表格 public Table(){ /*-------------------------------初始化界面----------------------*/ menubar= new JMenuBar(); menu = new JMenu("对数据表的处理"); iselect = new JMenuItem("显示数据表");

Java Swing-图形化界面-JFrame窗口

10.2 JFrame窗口 2019年12月31日16:25 /**JFrame类常用方法如下: JFrame()-创建一个无标题的窗口 JFrame(String s)-创建一个标题为s的窗口 public void setBounds(int a,int b,int width,int height)-设置出现在屏幕上时的初始化位置(a,b)窗口宽width、高height public void setSize(int width,int height)-设置窗口的大小,默认位置(0,0) public void setVisible(boolean b)-设置窗口是可见还是不可见,默认是不可见的 public void setResizeable(boolean b)-设置窗口是否可调大小,默认不可调大小 public void setDefaultCloseOperation(int operation)-设置单体窗体右上角的关闭图标后,程序会做出怎样的处理 */ 例子10-1 import javax.swing.*; public class E { public static void main(String args[]) { //参数为窗口名字 JFrame frame1 =new JFrame("第一个窗口"); JFrame frame2 =new JFrame("第二个窗口"); //设置窗口在屏幕上的位置和大小,分别为窗口 距屏幕的左面像素 frame1.setBounds(60, 100, 188, 108); frame2.setBounds(260, 100, 188, 108); frame1.setVisible(true); frame1.setDefaultCloseOperation(JFrame.DISP OSE_ON_CLOSE); frame2.setVisible(true); frame2.setDefaultCloseOperation(JFrame.DISP OSE_ON_CLOSE); } } 运行结果: 分区 十.图形用户界面设计 的第1 页

JAVA swing界面实现数据库增删改查

数据库程序设计 大作业 班级:2012级软件外包服务一班学号:201215140117 姓名:。。。 时间:2013-6-19

1.功能描述 1.1 功能简介 用swing做出图形化界面形式,实现数据库的增删改查把员工表跟部门表连接起来,实现数据的增加,删除,修改,查找。 1.2 实现步骤 (1)安装好虚拟机,并在其下确认oracle已安装成功(可以在dos下输入相关命令来检查是否安装成功)。 (2)在网络中心修改pc机上的VMware Network Adapter的IP、子网页码(默认)、网关。 (3)修改虚拟机的IP、网掩码(默认)、网关,确保PC机上的网关和虚拟机的IP一致。(在控制面板——>网络和共享中心——>本地连接3——>属性中,修改IP、网掩码)(4)在PC机的dos命令控制台ping虚拟机的IP,确保正常,能ping通(即将虚拟机内外ping通)。 (5)配置好虚拟机下的oracle的数据库和监听。 (6)在eclipse中编写相关代码,并用jtable实现图形化界面,用以实现与数据库的连接和操作数据库等功能。 (7)在eclipse中导入数据库的驱动。 (8)运行eclipse,查看运行结果。

2. 核心代码 2.1 1.数据库连接 package https://www.doczj.com/doc/241775764.html,.dbc; import java.sql.Connection; import java.sql.DriverManager;

import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DatabaseConnection { public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@192.168.0.128:1521/WFJ"; conn = DriverManager.getConnection(url, "hr", "hr"); stmt = conn.createStatement(); String sql = "select * from departments"; rs = stmt.executeQuery(sql); while (rs.next()) { System.out.print(rs.getInt("department_id")); System.out.print("\t"); System.out.print(rs.getString("department_name")); System.out.print("\t"); System.out.print(rs.getInt("manager_id")); System.out.print("\t"); System.out.print(rs.getInt("location_id")); System.out.println(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) {

Swing组件的各种面板(JRootPane根面板,JLayeredPane层面板等)

主要参考文现: [美]Herbert Schildt 著 鄢爱兰 鹿江春译 《java 参考大全 J2SE 》 清华大学出版社 2006年1月 孙卫琴 《Java 面向对象编程》 出版社及日期不详 java API 开发人员文档 本文作者:黄邦勇帅 本文的说明:本文主要讲解了对大学初学Swing 时对根面板JRootPane ,内容面板containPane ,层面板JLayeredPane ,玻璃面板glassPnae 的困惑,本文对各种面板作了详尽的讨论,让读者能真正的明白根面板,内容面板,层面板到底是什么,他们在程序中的作用,以及他们之间的关系,透明性,可见性,作了讲解。本文内容完全属于个人见解与参考文现的作者无关,其中难免有误解之处,望指出更正。 Swing 组件的各种面板(JRootPane 根面板,JLayeredPane 层面板等) 第一部分:JFrame 中各面板间的关系,透明性与可见性问题 注:在某些地方把面板也叫做窗格,比如根面板,也叫根窗格,层面板也叫分层窗格等。注意窗格与窗体是不一样的。 在Swing 中的JFrame 窗体与AWT 中的Frame 窗体有一些不同。JFrame 由他的窗体本身加上其上的JRootPane 根面板,JLayeredPane 层面板,containPane 内容面板,glassPane 玻璃面板,JMenuBar 菜单栏(可选,不包括在内)四部分组成。其中根面板在JRootPane 类中实现,层面板在JLayeredPane 类中实现,他们都是JComponent 的子类。而containPane 和glassPane 没有专门对应的类。 1、各种面板(或称窗格)的关系及作用: JRootPane 根面板:该面板是在JFrame 窗体创建时就默认添加进来的,是所有其他面板的载体或父级,他覆盖窗体的除标题栏和边条之外的整个表面。根面板默认是不可见的。根面板负责管理其他面板(层面板,玻璃面板),如使其他面板覆盖整个JFrame 窗体等。 JLayeredPane 层面板:该面板是其他所有面板的父级,在JRootPane 面板的上面,他再次覆盖窗体的整个表面,内容面板和JMenuBar 菜单栏被添加到层面板上。当添加了菜单栏时,菜单栏被添加到JLayeredPane 面板的顶部,剩下的部分被内容面板填充。层面板是分很多层的,每一层使用一个相应的数字来表示,而内容面板就位于层面板中的某一层,在后面的内容中我们可以看到层面板可以让你设计出相互重叠的内部窗体,层面板将负责管理各种内部窗体的叠放问题,对于层面板的每一层都相当于是一个容器,因此可以直接向层面板中添加组件。层面板的内容后面会作具体介绍。 containPane 内容面板:由层面板的介绍可知,内容面板是层面板中的某一层。默认的内容面板是不透明的,而且是一个JPane 对象。该面板在窗体中起着工作区的作用,当我们向窗体添加组件时就应该添加到这一层上,而不能像AWT 那样直接添加到窗体上,若你那样做了,实际上该组件也是被添加到内容面板上的,若窗体未设置内容面板,则组件无法显示。比如要添加按钮jb 则正确的方式为,Container p=jframe.getContentPane(); p.add(jr); 或jframe.getContentPane().add(jr); 其中getContentPane()是JFrame 类中的方法,该方法将反回内容面板的引用,这是访问默认的内容面板的方法,因为默认的内容面板没有特定的名字,因此应使用该方法。 glassPane 玻璃面板:该面板总是存在的,而且他位于最上面,默认情况下玻璃面板是不可见的,玻璃面板用于接收鼠标事件和在其他组件上绘图。 2、各面板中使用的布局管理器: 在内容面板上使用的布局管理器默认是BorderLayout 。 在根面板上使用的布局管理器是一个自定义的LayoutManager(布局管理器),他的作用是布局根面板之上的其他面板。很明显如果你要向根面板中添加组件就应使用setLayout 方法为其设置合适的布局管理器或自已设定组件的大小和显示

Swing组件大全

一抛砖引玉 本文指在利用一个小程序”Swing 组件大全”来引导大家学习Java这门语言,熟悉Ja va Swing的各个组件。并在学习过程中参考作者设计这一程序的方法和思想,最终形成自己的思维方式和学习方式。你能举一返三是作者最开心的事情。小程序演示了Java Swing 大部分组件。最后附上了全部代码及详细的注释说明。希望本文能对大家学习Java有所帮助。 随着Java风潮席卷国内,学习Java的方法和路径越来越多。而在大量的书本前,在J ava庞大的类库前大大家都有点迷失方向的感觉,是学J2EE,J2ME还是。。。。。。然而所有的这些都或多或少的离不开J2SE。万丈高楼平地起。J2SE是整个Java的基础,学好了这个对Java的各个方向都是很有利的。而学习J2SE的最初点就在界面设计,因为界面编程是你来感觉最直接的手段,是提高大家编程兴趣的很好开始,因为你写完程序编译后可马上看到自己的成果。而不像后台编程做完了都感受不到效果。而好的界面也是你测试你其他程序的基础。 界面设计!不就是拖拉操作吗?如果是VB,VC等可视化的编程,的确只是一些拖拉操作,由于Java语言的设计中所有的东西都是程序代码,在Java中如果想要设计一个好的界面,可不是简单的拖拉操作能完成的。即使使用了如JBuilder这么强大的可视化工具,你也得亲自动手写一些界面设计代码才能很好的完成你的任务。如果你能在此基础上理解Java界面设计的思想,对你学习这门语言将有莫大的帮助。 Java界面设计主要涉及Awt,Swing两大类库,Swing是Awt的扩展和功能加强。下面我们就以Swing为基础来说说整个Java的界面设计。 二感受效果 在开始之前,让我们看看这篇文章要达到的效果,有了目标和成果才有学习的兴趣,起码我是这样认为和学习的。如下图所示,这就是我们设计的界面,它包括了Swing中大部分

Java swing布局详解(附示例图)

当选择使用JPanel和顶层容器的content pane时,需要考虑布局管理。JPanel缺省是初始化一个FlowLayout,而content pane缺省是初始化一个BorderLayout。 下面将分别介绍几种最常用的布局管理器:FlowLayout、BorderLayout、BoxLayout、CardLayout、GridLayout和GridBagLayout。 代码演示 每一个布局管理器都会有一个代码演示,xxxLayoutDemo.java(见附件)。这些文件主要有三个方法组成: addComponentsT oPane()提供布局逻辑(依据不同的布局管理器和UI内容)。 Java代码 1public static void addComponentsT oPane(Container pane) {。。。} 2/** 3*createAndShowGUI()实例化一个JFrame,通过它的ContentPane加载布局逻辑内容。 4*/ 5private static void createAndShowGUI() { 6// Create and set up the window. 7JFrame frame = new JFrame("FlowLayoutDemo"); 8frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 9// Set up the content pane. 10addComponentsT oPane(frame.getContentPane()); 11// Display the window. 12frame.pack(); 13frame.setVisible(true); 14} 15//main()程序入口,单独起一个线程,实例化UI。 16public static void main(String[] args) {

简述Java图形用户界面设计(Swing)

简述Java图形用户界面设计(Swing) Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。 作为一个Java 程序员,从论坛上感受到使用Java 开发程序的人越来多,心中不免欣慰。但是,同样是从论坛中,看到多数人提到Java 就以为是网络开发——不是这样的,Java 也可以开发应用程序,而且可以开发出漂亮的图形用户界面的应用程序,也就是Windows/XWindow 应用程序。因此,我写下这篇文章,希望能带你进入Java 图形用户界面设计之门。 下面,让我们开始…… 说明:所有代码均在Windows XP + Eclipse 环境下编写和测试,示例图片均在Windows XP 下捕捉。 目录 一. AWT 和Swing 二. 框架、监听器和事件 三. 按钮、切换按钮、复选按钮和单选按钮 四. 文本输入框、密码输入框 五. 窗格、滚动窗格和布局管理 六. 后记——什么是SWT (2006年补充) 一. AWT 和Swing AWT 和Swing 是Java 设计GUI 用户界面的基础。与AWT 的重量级组件不同,Swing 中大部

分是轻量级组件。正是这个原因,Swing 几乎无所不能,不但有各式各样先进的组件,而且更为美观易用。所以一开始使用AWT 的程序员很快就转向使用Swing 了。 那为什么AWT 组件没有消亡呢?因为Swing 是架构在AWT 之上的,没有AWT 就没有Swing。所以程序员可以根据自己的习惯选择使用AWT 或者是Swing。但是,最好不要二者混用——除开显示风格不同不说,还很可能造成层次(Z-Order) 错乱,比如下例: 1/* 2 * AwtSwing.java 3 * @author Fancy 4 */ 5 6import java.awt.BorderLayout; 7import java.awt.Button; 8 9import javax.swing.JButton; 10import javax.swing.JDesktopPane; 11import javax.swing.JFrame; 12import javax.swing.JInternalFrame; 13import javax.swing.JPanel; 14 15public final class AwtSwing { 16 17public static void main(String[] args) { 18 AwtSwing as = new AwtSwing(); 19 as.show(); 20 } 21 22 JFrame frame = new JFrame("Test AWT and SWING"); 23 24 JDesktopPane jdp = new JDesktopPane(); 25 26 JInternalFrame jif1 = new JInternalFrame("controls"); 27 28 JInternalFrame jif2 = new JInternalFrame("cover"); 29 30public AwtSwing() { 31 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 32 frame.getContentPane().add(jdp); 33 34 jif1.setContentPane(new JPanel()); 35 jif2.setContentPane(new JPanel());

swing组件总结认识

JFrame是主窗口,它和JDialog,JApplet的地位并列。但是,一个JFrame可以添加JDialog和JApplet进去它的内容面板,而反过来就不行。 2、JLabel JLabel是一标签,在它的文本里嵌入html标签,可以简单实现一个超链接组件 3、JTextField 一个文本框 4、JTextArea 文本区域,与文本框不同的是它是多行的 5、JPasswordField 6、JPanel 一个面板.一般用作控制组件的布局. 7、JCheckBox 复选框 8、JRadioButton 单选按钮.单选按钮要用到ButtonGroup.添加到同一个ButtonGroup的单选按钮表示在它们之间只可选其一.不同ButtonGroup里的单选按钮相互之间的选择不受影响. 9、JScrollPane JScrollPane由四个角,两个头部,和一个视口组成.四个角和两个头部都是由Component组成.四个角并不是总是显示出来的.左上角只有当两个头部同时存在才显示,右下角只有两个滚动条同时出现才会出现.其他两个角可同理知道什么时候会出现.视口是显示内容的部分,由JViewport对象表示.而真正显示的内容,由JV iewport的view表示 10、JList JList是一个列表.这里将首次引入Model这个概念,中文翻译是模型,不好理解,其实就是数据的意思.JList用ListModel保存它的数据.简单应用可以用实现了ListModel的AbstraceListModel的子类DefaultListModel来保存它的数据(尽管它的名字有Default,但是只有你使用了它创建JList,它才存在.即如果你没有用DefaultListModel创建JList,则你用getModel()返回的ListModel不能强制转换为DefaultListModel). 11、JComboBox 组合框和JList很相似,它们都是用ListModel来保存数据.默认它是使用实现了ListModel的子接口ComboBoxModel的DefaultComboBoxModel来保存数据的.与JList的情况不同,一个JComboBox总是有一个Model来保存数据的,而JList则不然. 12、JFileChooser JFileChooser代表一个打开/保存文件对话框 13、JColorChooser 一个颜色选择器.它的构造方法有: JColorChooser(),JColorChooser(Color initialColor),JColorChooser(ColorSelectionModel model) 创建了对象以后,可以调用将它添加到JFrame,JPanel等其他容器里面. 14、JSlider JSlider是一个滑动条.其实它还是比较容易使用的 15、JLayeredPane JFrame,JApplet,JDialog,JInternalFrame其实是由好几部分组成的 16、JInternalFrame JFrame不能添加JFrame到自已的内容面板.那么,如何实现多文档程序呢?用JInternalFrame

swing 组件和容器——java swing 组件技术(中)

swing 组价和容器——java swing 组件和技术(中) 一、swing组件和容器概览 1.顶层容器(JFrame,JDialog,JApplet) JFrame—框架,主要用来设计应用程序的图像界面 JDialog—对话框,通常用来设计具有依赖关系的窗口 JApplet—小应用程序,主要用来设计嵌入网页中运行的java程序2.一般容器 普通容器(JPanel、JScrollPane、JToolbar、JSplitPane、JTabbedPane) JPanel—面板,通常只有背景颜色的普通容器 JScrollPane—滚动窗格,具有滚动条 JToolbar—工具条,通常将多个组件排成一排或者一列 JSplitPane—分裂窗格,用来装两个组件的容器 JTabbedPane—选项卡窗格,允许多个组件共享相同的界面空间

专用容器(JLayeredPane、JRootPane 、JInternalFrame) JLayeredPane—分层窗格,给窗格增加了深度的概念 JRootPane—根窗格,一般是自动创建的容器 JInternalFrame—内部窗格,可以在一个窗口内显示若干个类似于框架的窗口 3.基本控件(JButton、JCombobox、JList、JMenu、JSlider、JTextField) 4.不可编辑信息组件(JLabel、JProgressBar、JToolTip等) 5.可编辑组件(JColorChooser、JFileChooser、Jtabel、JTextArea、JTree等) 二、常用的swing组件和容器 1.JFrame ?顶层容器,默认不可见;默认布局方式为BorderLayout ?构造函数: ●JFrame() ●JFrame(String title)//title 为框架的标题内容 ?JFrame常用方法 ●setDefaultCloseOperation(int operation)—设置关闭框架的行为 参数operation一般是JFrame. EXIT_ON_CLOSE,表示关闭框架时, 则退出程序 ●setSize(int width, int height)—设置框架的大小 ●setVisible(boolean b)—设置框架是否可见,默认为false ●getContentPane()—获取顶层容器的内容面板

相关主题
文本预览
相关文档 最新文档