} public static void main(String[] args ){ JPanelTest ob = new JPanelTest(); } }这个你试试看!
import javax.swing.*; import java.awt.*; public class JPanelTest extends JFrame{ Container con; JPanel pnlMain=new JPanel(); JScrollPane jspMain; private int total = 50; private int line = 8; JPanelTest(){ con = this.getContentPane(); pnlMain.setLayout(new GridLayout(total/line,8)); pnlMain.setSize(149,2000);
for (int i =0 ; i<50; i++){ pnlMain.add(new JLabel("第"+(new Integer(i).toString())+"个")); }
} public static void main(String[] args ){ JPanelTest ob = new JPanelTest(); } }你来看看是不是这个样子的?? 一行显示8列。让它自己除!!
还是没解决,如果只有一行8个JLabel,那么显示出来的一行会在中间,我要求从顶端开始
import java.awt.*; import java.awt.event.MouseEvent;import javax.swing.*; import javax.swing.event.MouseInputListener;public class T { public static void main(String[] args) { JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT)) { @Override public Dimension getPreferredSize() { JViewport viewport = (JViewport) getParent(); if (viewport != null) { int wid = viewport.getWidth(); setSize(wid, 100); doLayout();
FlowLayout layout = (FlowLayout) getLayout(); int hei = layout.getVgap(); for (int i = 0; i < getComponentCount(); i++) { Component c = getComponent(i); hei = Math.max(hei, c.getY() + c.getHeight() + layout.getVgap()); }
return new Dimension(wid, hei); } return super.getPreferredSize(); } }; for (int i = 0; i < 50; i++) { p.add(new JLabel("Label - " + i)); } JScrollPane sp = new JScrollPane(p); JFrame f = new JFrame(); f.getContentPane().add(sp, BorderLayout.CENTER); f.setSize(400, 300); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
第一,行数要通过计算才能得出
第二,并且不美观,一行也会布满整个JPanel,10行也会布满整个JPanel我的每排8个是指在JPanel中的每一行最多不能超过8个,一旦超过8个就要换行,
其实我做这个,是为了实现餐饮收银系统中桌位状态的一个界面,
小弟在此先谢了
import java.awt.*;
public class JPanelTest extends JFrame{
Container con;
JPanel pnlMain=new JPanel();
JScrollPane jspMain;
JPanelTest(){
con = this.getContentPane();
pnlMain.setLayout(new GridLayout(50,1));
pnlMain.setSize(149,2000);
for (int i =0 ; i<50; i++){
pnlMain.add(new JLabel("第"+(new Integer(i).toString())+"个"));
}
jspMain= new JScrollPane(pnlMain);
con.add(jspMain,"Center");
this.setBounds(150,150,350,200);
this.setVisible(true);
}
public static void main(String[] args ){
JPanelTest ob = new JPanelTest();
}
}这个你试试看!
import java.awt.*;
public class JPanelTest extends JFrame{
Container con;
JPanel pnlMain=new JPanel();
JScrollPane jspMain;
private int total = 50;
private int line = 8;
JPanelTest(){
con = this.getContentPane();
pnlMain.setLayout(new GridLayout(total/line,8));
pnlMain.setSize(149,2000);
for (int i =0 ; i<50; i++){
pnlMain.add(new JLabel("第"+(new Integer(i).toString())+"个"));
}
jspMain= new JScrollPane(pnlMain);
con.add(jspMain,"Center");
this.setBounds(150,150,350,200);
this.setVisible(true);
}
public static void main(String[] args ){
JPanelTest ob = new JPanelTest();
}
}你来看看是不是这个样子的??
一行显示8列。让它自己除!!
import java.awt.event.MouseEvent;import javax.swing.*;
import javax.swing.event.MouseInputListener;public class T {
public static void main(String[] args) {
JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT)) {
@Override
public Dimension getPreferredSize() {
JViewport viewport = (JViewport) getParent();
if (viewport != null) {
int wid = viewport.getWidth();
setSize(wid, 100);
doLayout();
FlowLayout layout = (FlowLayout) getLayout();
int hei = layout.getVgap();
for (int i = 0; i < getComponentCount(); i++) {
Component c = getComponent(i);
hei = Math.max(hei, c.getY() + c.getHeight() + layout.getVgap());
}
return new Dimension(wid, hei);
}
return super.getPreferredSize();
}
};
for (int i = 0; i < 50; i++) {
p.add(new JLabel("Label - " + i));
} JScrollPane sp = new JScrollPane(p);
JFrame f = new JFrame();
f.getContentPane().add(sp, BorderLayout.CENTER);
f.setSize(400, 300);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}