java swing组件_Java -- Swing 组件使用

本文通过多个示例介绍 Java Swing GUI 编程的基本组件使用方法,包括按钮、复选框、下拉列表等交互元素,并展示了如何创建菜单栏、弹出框、标签页等高级功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 示例1

a7da8d25d73c98da81490fc264c36fca.png

public class Main {

JFrame f = new JFrame();

Icon okIcon = new ImageIcon("/home/test/start.png"); //图标文件

JButton ok = new JButton("OK", okIcon);

JRadioButton male = new JRadioButton("man", true); //单选按键 group

JRadioButton female = new JRadioButton("woman", false);

ButtonGroup bg = new ButtonGroup();

JCheckBox married = new JCheckBox("married ?", false);

String [] colors = new String[]{"red", "green", "blue"};

JComboBox colorChooser = new JComboBox(colors); //下拉选单,直接添加string[]

JList colorList = new JList(colors);

JTextArea ta = new JTextArea(8, 20);

JTextField name = new JTextField(40);

JMenuBar mb = new JMenuBar(); //菜单栏

JMenu file = new JMenu("file"); //file菜单

JMenu edit = new JMenu("edit");

Icon newIcon = new ImageIcon("/home/test/start.png");

JMenuItem newItem = new JMenuItem("New", newIcon);

Icon saveIcon = new ImageIcon("/home/test/start.png");

JMenuItem saveItem = new JMenuItem("Save", saveIcon);

JMenuItem exitItem = new JMenuItem("Exit", newIcon);

JCheckBoxMenuItem autoWrap = new JCheckBoxMenuItem("AutoWrap");

JPopupMenu pop = new JPopupMenu();

ButtonGroup flavorGroup = new ButtonGroup();

JRadioButtonMenuItem metalItem = new JRadioButtonMenuItem("Metal style", true);

JRadioButtonMenuItem windowsItem = new JRadioButtonMenuItem("Windows style");

public void init()

{

JPanel bottom = new JPanel();

bottom.add(name);

bottom.add(ok);

f.add(bottom, BorderLayout.SOUTH);

JPanel checkPanel = new JPanel();

checkPanel.add(colorChooser);

bg.add(male);

bg.add(female);

checkPanel.add(male);

checkPanel.add(female);

checkPanel.add(married);

Box topLeft = Box.createVerticalBox();

JScrollPane taJsp = new JScrollPane(ta);

topLeft.add(taJsp);

topLeft.add(checkPanel);

Box top = Box.createHorizontalBox();

top.add(topLeft);

top.add(colorList);

f.add(top);

newItem.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_MASK)); //添加快捷键

newItem.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

ta.append("clicked newItem");

}

});

file.add(newItem);

file.add(saveItem);

file.add(exitItem);

edit.add(autoWrap);

edit.setToolTipText("autowrap");

edit.addSeparator();

mb.add(file);

mb.add(edit);

f.setJMenuBar(mb); //设置菜单栏

pop.add(metalItem); //可将这两个item添加到flavorGroup 形成单选

pop.add(windowsItem);

ActionListener flavorListener = new ActionListener() { // 右键单击选项事件

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

ta.append(e.getActionCommand());

}

};

metalItem.addActionListener(flavorListener);

windowsItem.addActionListener(flavorListener);

ta.setComponentPopupMenu(pop); //设置右键菜单

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置X窗口退出

f.pack();

f.setVisible(true);

}

public static void main(String[] args) {

// TODO Auto-generated method stub

new Main().init();

}

}

2. 如上, name输入框中输入后 按Ok Button发送到 ta 中去。。。。为这个动作添加快捷键

Action sendMsg = new AbstractAction() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

ta.append(name.getText());

}

};

ok.addActionListener(sendMsg); //按键添加监听

name.getInputMap().put(KeyStroke.getKeyStroke('\n', java.awt.event.InputEvent.CTRL_MASK ),

"send"); //将Ctrl+Enter 键和"send"关联

name.getActionMap().put("send", sendMsg); //将"send"和 sendMsg Action 关联

3. JColorChooser 和 JFileChooser 。

4. 弹出提示框 showMessageDialog  showConfirmDialog  showInputDialog

public class Main {

JFrame f = new JFrame();

JOptionPane option = new JOptionPane();

JButton bt1 = new JButton("bt1");

JButton bt2 = new JButton("bt2");

JButton bt3 = new JButton("bt3");

JButton bt4 = new JButton("bt4");

Icon icon = new ImageIcon("/home/test/start.png");

public void init()

{

bt1.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) { //消息框

// TODO Auto-generated method stub

option.showMessageDialog(f, "show message", "test", JOptionPane.WARNING_MESSAGE, null);

// Message Type: ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, PLAIN_MESSAGE

}

});

bt2.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) { //确认框

// TODO Auto-generated method stub

int chose = JOptionPane.showConfirmDialog(f, "show message", "test", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, icon);

//Option Type: DEFAULT_OPTION, YES_NO_OPTION, YES_NO_CANCEL_OPTION, OK_CANCEL_OPTION

System.out.println(chose);

}

});

bt3.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) { //输入框

// TODO Auto-generated method stub

String str = JOptionPane.showInputDialog(f, "message", "title", JOptionPane.WARNING_MESSAGE);

System.out.println(str);

}

});

f.add(bt1, BorderLayout.SOUTH);

f.add(bt2, BorderLayout.NORTH);

f.add(bt3, BorderLayout.EAST);

f.add(bt4, BorderLayout.WEST);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.pack();

f.setVisible(true);

}

public static void main(String[] args) {

// TODO Auto-generated method stub

new Main().init();

}

}

5. JSplitPane 分割布局

0ba67aa835e70b0df53fab0ae741ebe9.png

public class Main {

JFrame f = new JFrame();

JLabel bookList = new JLabel("bookList");

JLabel bookCover = new JLabel("bookCover");

JLabel bookDesc = new JLabel("bookDesc");

public void init()

{

bookList.setPreferredSize(new Dimension(150, 300));

bookCover.setPreferredSize(new Dimension(300, 150));

bookDesc.setPreferredSize(new Dimension(300, 150));

JSplitPane left = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true,

bookCover, new JScrollPane(bookDesc)); //垂直分割

left.setOneTouchExpandable(true); //一处即展 功能

left.resetToPreferredSizes(); //

//left.setDividerSize(50); //设置分隔条大小

JSplitPane content = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,

left, bookList);

f.add(content);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.pack();

f.setVisible(true);

}

public static void main(String[] args) {

// TODO Auto-generated method stub

new Main().init();

}

}

6. JTabbedPane

5cb7f8a359e26353e0010ae61744f9ec.png

public class Main {

JFrame f = new JFrame();

JLabel bookList = new JLabel("bookList");

JLabel bookCover = new JLabel("bookCover");

JLabel bookDesc = new JLabel("bookDesc");

Icon icon = new ImageIcon("/home/test/start.png");

JTabbedPane tab = new JTabbedPane(JTabbedPane.LEFT, JTabbedPane.WRAP_TAB_LAYOUT); //定义tab,靠左 及 Tab排列策越

public void init()

{

bookList.setPreferredSize(new Dimension(150, 300));

bookCover.setPreferredSize(new Dimension(300, 150));

bookDesc.setPreferredSize(new Dimension(300, 150));

tab.addTab("title", icon, bookList, "bookList"); //添加Tab

tab.addTab("title", icon, bookCover, "bookCover");

tab.addTab("title", icon, bookDesc, "bookDesc");

tab.addChangeListener(new ChangeListener() { //Tab事件监听

@Override

public void stateChanged(ChangeEvent e) {

// TODO Auto-generated method stub

System.out.println(tab.getSelectedIndex());

}

});

f.add(tab);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.pack();

f.setVisible(true);

}

public static void main(String[] args) {

// TODO Auto-generated method stub

new Main().init();

}

}

7. LayeredPane

d2f2bc73f8b6b63405ccdb1dd71c0667.png

8. JDesktopPane   JInternalFrame

4e02507ae1be6ce02415933e51d44303.png

public class Main {

JFrame f = new JFrame();

JDesktopPane desktop = new JDesktopPane();

public void init()

{

JInternalFrame iframe1 = new JInternalFrame("iframe1", true, true, true, true);

iframe1.reshape(20, 20, 300, 400);

iframe1.show();

JInternalFrame iframe2 = new JInternalFrame("iframe2", true, true, true, true);

iframe2.reshape(20, 20, 300, 400);

iframe2.show();

desktop.setPreferredSize(new Dimension(800, 600));

desktop.add(iframe1);

desktop.add(iframe2);

f.add(desktop);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.pack();

f.setVisible(true);

}

public static void main(String[] args) {

// TODO Auto-generated method stub

new Main().init();

}

}

9. 进度条

4f40d2ed4ecfd18ebb23308f6e6ae9eb.png

public class Main {

JFrame frame = new JFrame("Test ProgressBar");

JProgressBar bar = new JProgressBar(JProgressBar.VERTICAL );

JCheckBox indeterminate = new JCheckBox("indeterminate");

JCheckBox noBorder = new JCheckBox("noBorder");

JCheckBox dialogCheck = new JCheckBox("dialogCheck");

public void init()

{

final ProgressMonitor dialog = new ProgressMonitor(frame, "ProgressMonitor", "complete", 0, 100);

Box box = new Box(BoxLayout.Y_AXIS);

box.add(indeterminate);

box.add(noBorder);

box.add(dialogCheck);

frame.setLayout(new FlowLayout());

frame.add(box);

frame.add(bar);

bar.setMinimum(0);

bar.setMaximum(100);

bar.setStringPainted(true);

noBorder.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent event)

{

bar.setBorderPainted(!noBorder.isSelected());

}

});

indeterminate.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent event)

{

bar.setIndeterminate(indeterminate.isSelected());

bar.setStringPainted(!indeterminate.isSelected());

}

});

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setVisible(true);

for (int i = 0 ; i <= 100 ; i++)

{

bar.setValue(i);

dialog.setProgress(i);

try

{

Thread.sleep(100);

}

catch (Exception e)

{

e.printStackTrace();

}

}

}

public static void main(String[] args)

{

new Main().init();

}

}

做方便实用的SWING控件! 欢迎大家测试并提交BUG报告. 由于个人能力和时间上的局限,希望有兴趣一起开发SWING控件的朋友,请与我联系.让我们一起努力! 为了方便查看,需要讨论的朋友请到另外一个置顶贴子. [讨论]关于"开源SWING控件" -------------------------------------------------------------------- 2004/03/25 首次发布 2004/04/08 把以前的组件和新做的组件合并到一个OpenSwing.jar文件中, 并初步将该组件库命名为”OpenSwing” 2004/06/17 加入了一个打印模板和一些新做的组件。 2004/07/25 加入了一个类似QQ界面的JGroupPane,修正了一些以前的组件的BUG. 对几乎所有的组件全部加入了JavaBeans处理, 使OpenSwing支持可视开发. 2005/04/17 将JNumberField最大长度,小数位长度修正成符合数据库定义的规范,如:NUMBER(10,2) 2005/04/21 修改了JNumberField的参数方式及不能输入负数的BUG,及数字验证方法 JDatePicker弹出时不能显示当前输入日期的BUG 加入了好多人在CJW论坛上贴子中想要的带关闭按钮的JCloseableTabbedPane可关闭的JTabbedPane的组件 2005/06/21 对JDatePicker加入了时分秒的输入 2006/01/20 修正了JPopupButton在XP风格下呈两个按钮样子的BUG 对JFontDialog进行了部分修改 2006/03/08 从JDatePicker提出来一个组件JCalendarPanel日期选择面板 并修改了JDatePicker的设计方式 2006/03/23 加入了韩文支持, 感谢在韩国工作的网友Sang Jian,韩文支持 OpenSwing_ko_KR.properties文件由他提供 2006/04/04 对JFileTree加入了文件过滤器建构式.并对显示进行了排序 -------------------------------------------------------------------- ■以下组件,均在j2sdk1.4.2_01+win2k环境下测试通过,继续欢迎大家测试并提交BUG报告. JCalendarPanel 日期选择面板, 从JDatePicker提出来的控件, 可以单独使用。 JCloseableTabbedPane 带关闭按钮/可设置菜单的JTabbedPane JDateField 日期输入框,输入正确格式的日期 JDatePicker 继承自JComboBox的日期选择框,保证输入正确格式的日期(yyyy-MM-dd) 履历: 2004/03/26 根据网友caiyj的建议引入了recoon写的关于JDateDocument的校验方法 2004/04/02 根据网友caiyj提交的BUG,修正了做为TableCellEditor时日期选择面板弹不出问题 JDirChooser 文件目录选择对话框 JFileTree 文件目录树 JFontDialog 字体对话框 JGroupPane 类似QQ界面的组群管理面板 JIpAddressField IP地址输入框,只能输入0~255数字的IP地址 JListChooser 列表选择对话框 JNumberField 数字输入框,可限制小数位数,数字最大长度,最大最小能输入的数字 JPopupButton 带下拉菜单的工具栏按钮 JStatusBar 模拟Windows的状态栏. JStringField 字符输入框,限制可输入的最大长度 JTreeComboBox 带有树形结构的下拉列表 com.sunking.swing.print.* 一个打印模板 -------------------------------------------------------------------- ■ OpenSwing的测试方法: 解压后是一个JBUILDER项目的目录结构,里面有一个test.bat文件和OpenSwing.jar(主库文件)/OpenSwingBeanInfo.jar(可视开发支持文件),直接执行test.bat进行测试。 ■ OpenSwing的发布: 只需要将OpenSwing.jar(主库文件)包含在CLASSPATH中即可。 OpenSwingBeanInfo.jar(可视开发支持文件)不需要发布, 仅提供可视化开发的支持 ■JBuilder上配置OpenSwing可视化开发组件 1.将OpenSwing.jar/ OpenSwingBeanInfo.jar文件复制到 %JBuilderX_HOME%\lib\ 目录下 2.打开JBuilderX 3.菜单Tools --> Configure Libraries…-->弹出Configure Libraries…对话框 ①New… --> Name中输入OpenSwing, Location中输入User Home -->OK ②选取对话框左边User Home下面出现的OpenSwing ③对话框右边Class和 Source页中分别做如下动作: Add…-->选择%JBuilder_HOME%\lib\OpenSwing.jar和OpenSwingBeanInfo.jar --> OK ④按OK关闭 Configure Libraries…对话框 4.菜单Tools--> Configure Palette… 弹出Palette Properties…对话框 ①Pages 页中按 Add… --> PageName中输入OpenSwing --> OK ②Add components页中 -->Select library…--> 选取User Home 下的OpenSwing类库-->OK ③Add components页中 -->在Component filtering块中选择 No filtering-->展开com.sunking.swing类包-->选择如下类: JGroupPanel,JStatusBar,JPopupButton,JDatePicker,JStringField,JNumberField,JFontDialog,JIpAddressField,JDateField (可按住Ctrl键复选)-->OK ④按OK关闭Palette Properties…对话框 5.配置成功标志: 随便打开一个JAVA文件,点下面的Design页,然后上面会出来一个设计工具条,诸如:Swing,Swing Containers…等,工具条的右上角有用来滚动工具栏的按钮,我们可以将其滚动到最末尾.如果看到有一个OpenSwing的页,并在它上面有几个可视组件的话,说明你已经配置成功了,开始你的OpenSwing可视开发之旅吧.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值