如题,我用Flowlayout装了很多按钮,都是正常排序的,但是加了JScrollPane全都变成一排的,是不是Flowlayout不支持竖项的
JScrollPane,我试过用GridBagLayout,但是貌似还是一样的,添加了JScrollPane就不自动换行了。
求解决方法
JScrollPane,我试过用GridBagLayout,但是貌似还是一样的,添加了JScrollPane就不自动换行了。
求解决方法
JScrollPane可以把你要显示的面板装起来,然后就会正常显示,空间不够就会出现滚动条。
设置你使用了 Flowlayout 的那个控件的 PreferredSize
即调用 setPreferredSize 方法,或者重写其 getPreferredSize 方法
使它的宽度固定,即使包在 JScrollPane 里也会换行方法二:
不要用 JScrollPane
这你把需求详细说一下,比如为什么你要用 JScrollPane?
才能给你更多的参考
import java.awt.event.*;
import java.sql.*;
//import java.util.EventListener;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;public class CopyOfMainFrame extends JFrame implements TreeSelectionListener, MouseListener { private Connection con=null;
private Statement st=null;
private DefaultTreeModel model;
private JPopupMenu pop;
private JTree jtree; JPopupMenu popup = new JPopupMenu(); JMenuItem item1 = new JMenuItem("修 改");
JMenuItem item2 = new JMenuItem("刷 新");
JMenuItem item3 = new JMenuItem("删 除"); private String dbURL = "jdbc:mysql://localhost/book?useUnicode=true&characterEncoding=GBK"; // 数据库标识名
private String user = "root"; // 数据库用户
private String password = ""; // 数据库用户密码
private Panel borderpanel = new Panel();
private Panel flowpanel;
private JTextArea jta1 = new JTextArea("\n"+"序号:" +""+ "\t书名:" + "" + "\t副标题:" + ""
+ "\t作者:" + "" + "\t国籍:" + "" + "\t出版社:" + "" + "\t价格:" + ""+ "\tISBN:" + ""
+"\n"+"\n"+"\n"+"\n"+"\n"+"\n"+"\n"+"\n"+"\n"+"\n"+"\n");
private void init(){
try{
Class.forName("com.mysql.jdbc.Driver"); // 加载驱动器
con = DriverManager.getConnection(dbURL, user, password); // 获取连接
st = con.createStatement(); // 获取Statement对象
}catch(Exception e){
e.printStackTrace();
}
}
public CopyOfMainFrame(String title) throws SQLException, ClassNotFoundException {
super(title);
init();
MenuBar mb = new MenuBar();
this.setMenuBar(mb);
Menu m1 = new Menu("菜单");
Menu m2 = new Menu("编辑");
Menu m3 = new Menu("帮助");
mb.add(m1);
mb.add(m2);
mb.add(m3);
MenuItem mi1 = new MenuItem("添加一本书");
mi1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
AddBook aa=new AddBook();
aa.setVisible(true);
}
}); MenuItem mi2 = new MenuItem("退出");
mi2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
MenuItem mi3 = new MenuItem("关于");
mi3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,"Version v0.01");
}
});
m1.add(mi1);
m1.add(mi2);
m3.add(mi3);
//获取屏幕分辨率
int screenWidth = ((int)java.awt.Toolkit.getDefaultToolkit().getScreenSize().width);
int screenHeight = ((int)java.awt.Toolkit.getDefaultToolkit().getScreenSize().height); setSize(screenWidth-250, screenHeight-100);// 窗口大小1024*768
setLocation(0,0);// 距离左上角图标距离0,0
setLayout(new BorderLayout());
setLocationRelativeTo(null); //界面居中
this.addWindowListener(new WindowAdapter(){ @Override
public void windowClosing(WindowEvent arg0) {
try{
if(st!=null)
st.close();
if(con!=null)
con.close();
System.exit(0);
}catch(Exception e){
e.printStackTrace();
System.exit(1);
}
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口时退出程序
//树组件的绘制
TreeNode root =setJTree();
model = new DefaultTreeModel(root);
jtree = new JTree(model);
jtree.setEditable(true);
jtree.addMouseListener(this);
JScrollPane scrollPane = new JScrollPane(jtree);
add(scrollPane, BorderLayout.WEST);
setFlowLayoutPanel();
add(flowpanel,FlowLayout.LEFT);
add(jta1,BorderLayout.SOUTH); }
private TreeNode setJTree() {
jtree=new JTree();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("书籍收藏");
DefaultMutableTreeNode root1 = new DefaultMutableTreeNode("收藏夹");
DefaultMutableTreeNode root2 = new DefaultMutableTreeNode("阅读列表");
DefaultMutableTreeNode root3 = new DefaultMutableTreeNode("搜索结果");
DefaultMutableTreeNode root4 = new DefaultMutableTreeNode("所有书籍");
DefaultMutableTreeNode root5 = new DefaultMutableTreeNode("回收站");
//ye-爷;fu-父;zi-子
DefaultMutableTreeNode ye = new DefaultMutableTreeNode("计算机类");
root.add(ye);
DefaultMutableTreeNode fu = new DefaultMutableTreeNode("数据库");
ye.add(fu);
DefaultMutableTreeNode zi = new DefaultMutableTreeNode("SQL数据库");
fu.add(zi);
zi = new DefaultMutableTreeNode("程序语言");
fu.add(zi);
fu = new DefaultMutableTreeNode("软件");
ye.add(fu);
zi = new DefaultMutableTreeNode("C语言");
fu.add(zi);
ye = new DefaultMutableTreeNode("经济类");
root.add(ye);
fu = new DefaultMutableTreeNode("宏观经济");
ye.add(fu);
fu = new DefaultMutableTreeNode("微观经济");
ye.add(fu);
root.add(root1);
root.add(root2);
root.add(root3);
root.add(root4);
root.add(root5);
//树的数据模型
DefaultTreeModel model = new DefaultTreeModel(root);
//设置数据模型
jtree.setModel(model);
// 展开所有树
for (int i = 0; i < jtree.getRowCount(); i++)
jtree.expandRow(i);
//添加事件
jtree.addTreeSelectionListener(this); return root; } @Override
public void valueChanged(TreeSelectionEvent arg0) {
// TODO Auto-generated method stub } public void setFlowLayoutPanel() throws SQLException,ClassNotFoundException {
flowpanel = new Panel();
FlowLayout flowlayout = new FlowLayout();
//borderlayout.setAlignment(BorderLayout.N);//设置图标靠左
flowpanel.setLayout(flowlayout); popup.add(item1);//右键菜单
popup.add(item2);
popup.add(item3);
borderpanel.add(popup);
String sqlStr = "select * from user"; // SQL查询语句
ResultSet rs = st.executeQuery(sqlStr); // 执行查询 while (rs.next()) { // 遍历ResultSet
String str=rs.getString("url");
final String strid=rs.getString("id"); // 获取数据
final String strtitle=rs.getString("title");
final String strsubhead=rs.getString("subhead");
final String strauthors=rs.getString("authors");
final String strnationality=rs.getString("nationality");
final String strpublisher=rs.getString("publisher");
final String strprice=rs.getString("price");
final String strisbn=rs.getString("isbn");
JButton btnSmall=new JButton("");
//JButton btnSmall=new JButton(strtitle);//图片+文字显示
ImageIcon icon = new ImageIcon(str);
btnSmall.setIcon(scaleImage(icon));
btnSmall.setSize(100, 150);
btnSmall.setVisible(true);
btnSmall.invalidate(); flowpanel.add(btnSmall);
}
} private ImageIcon scaleImage(ImageIcon icon) { int width = icon.getIconWidth();
// System.out.print(width);
int height = icon.getIconHeight();
// if (width <= 100 && height <= 150) {
// return icon;
// }
Image image = icon.getImage();
image = image.getScaledInstance(100, 150, Image.SCALE_DEFAULT);
return new ImageIcon(image);
}
public static void main(String[] args) throws SQLException,ClassNotFoundException
{
CopyOfMainFrame yf = new CopyOfMainFrame("我的书架");
yf.setVisible(true);
}
@Override
public void mouseClicked(MouseEvent arg0) {
// 获取选择的节点
DefaultMutableTreeNode node = (DefaultMutableTreeNode) jtree.getLastSelectedPathComponent();
if(!node.isLeaf())
{
return ;
}
flowpanel.removeAll();
System.out.println(node.getUserObject());
String sqlStr="select * from user where classified ='"+node.getUserObject().toString()+"'";
try{
ResultSet rs = st.executeQuery(sqlStr); // 执行查询
while (rs.next()) { // 遍历ResultSet
String str = rs.getString("url");
final String strid = rs.getString("id"); // 获取数据
final String strtitle = rs.getString("title");
final String strsubhead = rs.getString("subhead");
final String strauthors = rs.getString("authors");
final String strnationality = rs.getString("nationality");
final String strpublisher = rs.getString("publisher");
final String strprice = rs.getString("price");
final String strisbn = rs.getString("isbn");
//JButton btnSmall = new JButton(strtitle);
JButton btnSmall = new JButton("");
ImageIcon icon = new ImageIcon(str);
btnSmall.setIcon(scaleImage(icon));
btnSmall.setSize(100, 150);
btnSmall.setVisible(true);
btnSmall.invalidate(); flowpanel.add(btnSmall);
}
}catch(Exception e){
e.printStackTrace();
}
flowpanel.repaint();
flowpanel.validate();
} @Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub }
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub }
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub }
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub }
}