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);

}

大家帮忙看一下,为什么我的窗体没有内容,谢谢,以及什么原因?
...全文
12950 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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();
	}

62,635

社区成员

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

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