JFrame布局学习

hhb2009sunny 2013-08-13 01:09:46
public void ManageView(){
jf.setVisible(false);
JFrame jframe=new JFrame("超市购物管理");
JMenuBar jmb=new JMenuBar();
JMenu menu_shoping=new JMenu("查看购买商品");
JMenu menu_user=new JMenu("会员管理");
JMenu menu_store=new JMenu("仓库管理");
JMenu menu_exit=new JMenu("退出");
Object data[][]={
{1,"张三","男","18","010.82607080"},
{2,"李四","女","24","021.68727080"},
{3,"王五","男","18","0459.82607080"},
{4,"赵六","男","18","010.82607080"},
{5,"任琦","男","18","010.82607080"},
{6,"吴八","男","18","010.82607080"}
};
String columnNames[]={"编号","姓名","性别","年龄","电话"};
JTable table=new JTable(data,columnNames);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JScrollPane pane=new JScrollPane(table);
Container contentPane=jframe.getContentPane();
contentPane.setLayout(new FlowLayout());
// JPanel jp=new JPanel();
// jp.setLayout(new FlowLayout());
JButton search=new JButton("查找");
JButton add=new JButton("增加");
JButton delete=new JButton("删除");
JButton update=new JButton("修改");
contentPane.add(search);
contentPane.add(add);
contentPane.add(delete);
contentPane.add(update);

jmb.add(menu_shoping);
jmb.add(menu_user);
jmb.add(menu_store);
jmb.add(menu_exit);
jframe.setJMenuBar(jmb);
jframe.add(pane,BorderLayout.NORTH);
//jframe.add(contentPane,BorderLayout.SOUTH);
jframe.setSize(600, 500);
jframe.setLocation(300, 200);
jframe.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
jframe.setVisible(true);

}

大家帮忙看一下,为什么我的窗体没有内容,谢谢,以及什么原因?
...全文
12916 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fearlessMore 2013-08-22
  • 打赏
  • 举报
回复
你的表格想要实现删除、插入、修改等功能,建议维护表格模型,而不是直接JTable table=new JTable(data,columnNames);来建立。给你一个像MS Excel中实现固定列表格的例子:
package com.han;

import java.awt.BorderLayout;
import java.util.Vector;

import javax.swing.JFrame;

/**
 * Provide a fixed column in a table.
 * 
 * <code><p>public boolean isCellEditable(int row, int column) {<p>
        return getModel().isCellEditable(convertRowIndexToModel(row),<p>
                                         convertColumnIndexToModel(column));<p>
    }<p>
    </code> so we can also directly rewrite the isCellEditable() in the table
 * model.
 * 
 * @author Gaowen
 * 
 */
public class JTable4_Modified extends JFrame {
	private static final long serialVersionUID = 805308369080023303L;

	public JTable4_Modified() {
		super();
		setTitle("提供行标题栏的表格");
		setBounds(100, 100, 500, 400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		Vector<String> columnNameV = new Vector<>();
		columnNameV.add("日期");
		for (int i = 1; i < 21; i++) {
			columnNameV.add("商品" + i);
		}
		Vector<Vector<Object>> tableValueV = new Vector<>();
		for (int row = 1; row < 31; row++) {
			Vector<Object> rowV = new Vector<>();
			rowV.add(row);
			for (int col = 0; col < 20; col++) {
				rowV.add((int) (Math.random() * 1000));
			}
			tableValueV.add(rowV);
		}
		final MFixedColumnTable_Modified panel = new MFixedColumnTable_Modified(
				columnNameV, tableValueV, 1);
		getContentPane().add(panel, BorderLayout.CENTER);
	}

	public static void main(String[] args) {
		JTable4_Modified frame = new JTable4_Modified();
		frame.setVisible(true);
	}
}
package com.han;

import java.awt.BorderLayout;
import java.util.Vector;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;

/**
 * <pre>
 * public boolean isCellEditable(int row, int column) {
 *       return getModel().isCellEditable(convertRowIndexToModel(row),
 * 			convertColumnIndexToModel(column));
 * }
 * </pre>
 * 
 * so we can also directly rewrite the isCellEditable() in the table model.
 * 
 * @author HAN
 * 
 */
public class MFixedColumnTable_Modified extends JPanel {
	private static final long serialVersionUID = -8001758880985479654L;
	private Vector<String> columnNameV; // declare the table column name vector
	private Vector<Vector<Object>> tableValueV;
	private int fixedColumn = 1; // the fixed column number
	private JTable fixedColumnTable;
	private FixedColumnTableModel fixedColumnTableModel;
	private JTable floatingColumnTable;
	private FloatingColumnTableModel floatingColumnTableModel;

	private class FixedColumnTableModel extends AbstractTableModel {
		private static final long serialVersionUID = 3935656415101599023L;

		@Override
		public int getRowCount() {
			return tableValueV.size();
		}

		@Override
		public int getColumnCount() {
			return fixedColumn;
		}

		@Override
		public Object getValueAt(int rowIndex, int columnIndex) {
			return tableValueV.get(rowIndex).get(columnIndex);
		}

		@Override
		public String getColumnName(int columnIndex) {
			return columnNameV.get(columnIndex);
		}
	}

	private class FloatingColumnTableModel extends AbstractTableModel {
		private static final long serialVersionUID = -2481466672947191281L;
		
		@Override
		public boolean isCellEditable(int row, int column) {
			return true;
		}

		@Override
		public int getRowCount() {
			return tableValueV.size();
		}

		@Override
		public int getColumnCount() {
			return columnNameV.size() - fixedColumn;
		}

		@Override
		public Object getValueAt(int rowIndex, int columnIndex) {
			return tableValueV.get(rowIndex).get(columnIndex + fixedColumn);
		}

		@Override
		public String getColumnName(int columnIndex) {
			return columnNameV.get(columnIndex + fixedColumn);
		}
	}

	private class MListSelectionListener implements ListSelectionListener {
		boolean isFixedColumnTable = true;

		public MListSelectionListener(boolean isFixedColumnTable) {
			this.isFixedColumnTable = isFixedColumnTable;
		}

		@Override
		public void valueChanged(ListSelectionEvent e) {
			if (isFixedColumnTable) {
				int row = fixedColumnTable.getSelectedRow();
				floatingColumnTable.setRowSelectionInterval(row, row);
			} else {
				int row = floatingColumnTable.getSelectedRow();
				fixedColumnTable.setRowSelectionInterval(row, row);
			}
		}
	}

	public MFixedColumnTable_Modified(Vector<String> columnNameV,
			Vector<Vector<Object>> tableValueV, int fixedColumn) {
		super();
		setLayout(new BorderLayout());
		this.columnNameV = columnNameV;
		this.tableValueV = tableValueV;
		this.fixedColumn = fixedColumn;
		// create fixedColumnTable
		fixedColumnTableModel = new FixedColumnTableModel();
		fixedColumnTable = new JTable(fixedColumnTableModel);
		ListSelectionModel fixed = fixedColumnTable.getSelectionModel();
		fixed.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		fixed.addListSelectionListener(new MListSelectionListener(true));
		// create floatingColumnTable
		floatingColumnTableModel = new FloatingColumnTableModel();
		floatingColumnTable = new JTable(floatingColumnTableModel);
		floatingColumnTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		ListSelectionModel floating = floatingColumnTable.getSelectionModel();
		floating.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		floating.addListSelectionListener(new MListSelectionListener(false));
		// create scrollPane
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER,
				fixedColumnTable.getTableHeader());
		JViewport viewport = new JViewport();
		viewport.setView(fixedColumnTable);
		viewport.setPreferredSize(fixedColumnTable.getPreferredSize());
		scrollPane.setRowHeaderView(viewport); // viewport 视口
		scrollPane.setViewportView(floatingColumnTable);
		add(scrollPane, BorderLayout.CENTER);
	}
}
hhb2009sunny 2013-08-22
  • 打赏
  • 举报
回复
非常感谢你,Gaowen_HAN,学习了,真的对我帮助挺大的!
土---豆 2013-08-21
  • 打赏
  • 举报
回复
我把你的代码复制,是可以的啊,可能是你导入包的问题吧
wangbylove 2013-08-13
  • 打赏
  • 举报
回复
怎么没看到是什么问题啊
hhb2009sunny 2013-08-13
  • 打赏
  • 举报
回复
我的还有其他的方法,语句块还没执行完毕,所以窗体就一直没有显示,谢谢你了
hhb2009sunny 2013-08-13
  • 打赏
  • 举报
回复
Java项目中一般会经常使用swing来开发一些C/S架构的软件吗?
马达马达达 2013-08-13
  • 打赏
  • 举报
回复
马达马达达 2013-08-13
  • 打赏
  • 举报
回复
我这有啊。。。加一个main方法 还有 jf.setVisible(false);去掉了。。。
public static void ManageView(){
		JFrame jframe=new JFrame("超市购物管理");
		JMenuBar jmb=new JMenuBar();
		JMenu menu_shoping=new JMenu("查看购买商品");
		JMenu menu_user=new JMenu("会员管理");
		JMenu menu_store=new JMenu("仓库管理");
		JMenu menu_exit=new JMenu("退出");
		Object data[][]={
				{1,"张三","男","18","010.82607080"},
				{2,"李四","女","24","021.68727080"},
				{3,"王五","男","18","0459.82607080"},
				{4,"赵六","男","18","010.82607080"},
				{5,"任琦","男","18","010.82607080"},
				{6,"吴八","男","18","010.82607080"}
		};
		String columnNames[]={"编号","姓名","性别","年龄","电话"};
		JTable table=new JTable(data,columnNames);
		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		JScrollPane pane=new JScrollPane(table);
		Container contentPane=jframe.getContentPane();
		contentPane.setLayout(new FlowLayout());
//		JPanel jp=new JPanel();
//		jp.setLayout(new FlowLayout());
		JButton search=new JButton("查找");
		JButton add=new JButton("增加");
		JButton delete=new JButton("删除");
		JButton update=new JButton("修改");
		contentPane.add(search);
		contentPane.add(add);
		contentPane.add(delete);
		contentPane.add(update);
		
		jmb.add(menu_shoping);
		jmb.add(menu_user);
		jmb.add(menu_store);
		jmb.add(menu_exit);
		jframe.setJMenuBar(jmb);
		jframe.add(pane,BorderLayout.NORTH);
		//jframe.add(contentPane,BorderLayout.SOUTH);
		jframe.setSize(600, 500);
		jframe.setLocation(300, 200);
		jframe.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		jframe.setVisible(true);
		
	}
	
	public static void main(String[] args) {
		ManageView();
	}
整理了Java GUI编程基础知识! public class AllFrame { /** * 这里的代码涉及到 GUI 编程基本面板、基本组件、事件(ActionListener、ChangeListener、MouseListener) */ public AllFrame() { // new 一个主窗体 也可以这样写 new MainFrame(); MainFrame mf = new MainFrame(); } public static void main(String[] args) { new AllFrame(); } // 主窗体 继承 窗体基本格式 类 Jframe 以下弹出窗口均继承 Jframe class MainFrame extends Jframe implements ActionListener { JMenuBar menubar = new JMenuBar();;// 菜单条 JMenu jmenu[] = new JMenu[5];// panelMenu,usedMenu1,usedMenu2,layoutMenu,helpMenu; // 菜单项 JButton closebtn;// 关闭窗体 // 具体的选项 JMenuItem panelitem[] = new JMenuItem[4]; JMenuItem useditem1[] = new JMenuItem[6]; JMenuItem useditem2[] = new JMenuItem[6]; JMenuItem layoutitem[] = new JMenuItem[3]; JMenuItem helpitem = new JMenuItem("关于"); // 菜单中名称 String menu[] = { "面板使用", "常用组件一", "常用组件二", "布局设置", "帮助" }; String pane[] = { "普通面板", "滚动面板", "分割面板", "选项面板" }; String uesd1[] = { "标签", "按钮", "文本框", "文本域", "单选按钮" ,"微调"}; String uesd2[] = { "滑块","复选框", "下拉菜单", "列表", "表格", "树状" }; String layout[] = { "流式布局", "边界布局", "网格布局" }; // Jpanelitem,Jscrollpaneitem,Splitpaneitem,JTabbedpanelitem, // Jlabelitem,Jbuttonitem,JTextfielditem,JTextareaitem,JRadiobuttonitem, // JCheckboxitem,JCombomoxitem,Jlistitem,Jtableitem,Jtreeitem, // Flowlayoutitem,Borderlayoutitem,Girdlayoutitem, // Helpitem}; public MainFrame() { this.setTitle("JAVA图型界面学习(GUI)"); // 加载菜单条到窗体中 this.setJMenuBar(menubar); // 重新设置大小 this.setSize(380, 290); // 简单的居中方法 在窗体基本格式类 Jframe 中有详细的居中方法 this.setLocationRelativeTo(null); // 设置关闭窗口 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 调用方法 menu(); // 设置容器 Container con = this.getContentPane(); // 定义一个 标签 “JAVA图型界面学习” JLabel jl = new JLabel("JAVA图型界面学习"); // 组件 设置字体大小, 其他组件用法相同 jl.setFont(new Font("隶书", Font.BOLD, 24)); // 具体定位 组件名.setBounds(x, y, width, height) jl.setBounds(30, 30, 280, 50); // 把标签加到 con 容器中 con.add(jl); /
JAVA 面向对象程序设计教程 第9章Java Swing图形用户界面 第9章Java-Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华大学出版社全文共27页,当前为第1页。 第9章Java Swing图形用户界面 第9章Java-Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华大学出版社全文共27页,当前为第2页。 9.1 Java Swing概述 9.2 JFrame窗口 9.3布局管理器 9.4 常用控件 9.5事件处理机制 9.6 JDialog对话框 9.7 应用实例:打地鼠小游戏 第9章Java Swing图形用户界面 第9章Java-Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华大学出版社全文共27页,当前为第3页。 通过GUI(Graphic User Interface,图形用户界面),用户与程序之间可以方便地进行交互。Java的java.awt包,即Java抽象窗口工具包(Abstract Window Toolkit,AWT)提供了许多用来设计GUI的组件类。Java早起进行用户界面设计时,主要使用java.awt包提供的类,如Button(按钮)、TextField(文本框)和List(列表)等。JDK1.2推出后,增加了一个新的javax.swing包,该包提供了功能更为强大的用来设计GUI的类。 9.1 Java Swing概述 第9章Java-Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华大学出版社全文共27页,当前为第4页。 Java提供的JFrame类的实例是一个底层容器,即通常所说的窗口。其他组件必须被添加到底层容器中,以便借助这个底层容器和操作系统进行信息交互。简单地讲,如果应用程序需要一个按钮,并希望用户和按钮交互,即用户单击按钮使程序做出某种相应的操作,那么这个按钮必须出现在底层容器中,否则用户无法看到按钮,更无法让用户和按钮交互。 9.2 JFrame窗口 第9章Java-Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华大学出版社全文共27页,当前为第5页。 当把一个组件添加到容器中时,希望控制组件在容器中的位置和尺寸,这就需要学习布局设计的知识,因为组件在容器中的位置和尺寸是由布局管理器来决定的。所有的容器都会引用一个布局管理器实例,通过它来自动进行组建的布局管理。 9.3布局管理器 第9章Java-Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华大学出版社全文共27页,当前为第6页。 流布局管理器是最简单的布局管理器,FlowLayout布局管理器是Panel和Applet的默认布局管理器。按照组建的添加次序将它们从左到右地放置在容器中。 9.3.1FlowLayout布局 第9章Java-Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华大学出版社全文共27页,当前为第7页。 9.3.2BorderLayout布局 BorderLayout为在容器中放置组件提供了一个稍微复杂的布局方案。边界布局管理器将整个容器分为5个区域,分别为东、西、南、北和中间。北占据容器上方,东占据容器右侧,以此类推。中区域是东、南、西、北都填满后剩下的区域,组件可以放置在指定的一个区域。 第9章Java-Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华大学出版社全文共27页,当前为第8页。 9.3.3GridLayout布局 GridLayout是使用较多的布局,其基本的布局策略是把容器划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小格中。 第9章Java-Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华大学出版社全文共27页,当前为第9页。 窗体上的使用的是一个两行三列的网格布局,将窗体划分为了两行三列共六个部分,每个部分放上一个按钮组件。 this.setLayout(new GridLayout(2, 3)); this.add(button1); this.add(button2); this.add(button3); this.add(button4); this.add(button5); this.add(button6); 9.3.3GridLayout布局 第9章Java-Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华大学出版社全文共27页,当前为第10页。 下面的布局又是如何实现的呢? 9.3.3GridLayout布局 第9章Java-Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧