JAVA面板的叠加_Java ScrollPane重叠内容

我对我的JScrollPanes的初学者问题非常肯定.问题是垂直滚动条与封闭面板内的组件重叠(在右侧).当滚动条与JComboBoxes的下拉位重叠时,它会变得有点痛苦.

我把问题归结为这个小片段 – 我希望它说明了这个问题.

public class ScrollTest extends JFrame

{

public ScrollTest()

{

super("Overlap issues!");

JPanel panel = new JPanel();

panel.setLayout(new GridLayout(100,0));

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

{

panel.add(new JButton("Small overlap here ->"));

}

JScrollPane scrollpane = new JScrollPane(panel);

add(scrollpane);

pack();

setVisible(true);

}

public static void main(String[] args)

{

new ScrollTest();

}

}

我先看了看,但看不出是否其他人已经解决了这个问题.对不起,如果它是重复的,非常感谢任何帮助,任何人都可以提供像我这样的java-newb!

最佳答案

问题是JScrollPane的默认设置是使用默认的JScrollPane.VERTICAL_SCROLLBAR_​​AS_NEEDED来布局组件,这反过来又添加了滚动条而没有再次布置组件.

在您的示例中,您知道需要滚动条,因此请将其更改为始终显示滚动条

public class ScrollTest extends JFrame

{

public ScrollTest()

{

super("Overlap issues!");

JPanel panel = new JPanel();

//Insets insets = panel.getInsets();

//insets.set(5,5,25);

//insets.set(top,left,bottom,right);

panel.setLayout(new GridLayout(100,0));

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

{

panel.add(new JButton("Small overlap here ->"));

}

JScrollPane scrollpane = new JScrollPane(panel);

scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

add(scrollpane);

pack();

setVisible(true);

}

public static void main(String[] args)

{

new ScrollTest();

}

}

相关文章

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JList 是 Java Swing 组件的一个列表组件,可以用来展示一组数据。以下是 JList 的用法: 1. 创建 JList 对象: ``` JList list = new JList(); ``` 2. 设置数据模型: JList 组件需要一个数据模型来存储数据,可以使用 DefaultListModel 类来创建数据模型: ``` DefaultListModel model = new DefaultListModel(); model.addElement("Item 1"); model.addElement("Item 2"); list.setModel(model); ``` 3. 设置显示样式: 可以通过设置 ListCellRenderer 对象来改变每个列表项的显示样式: ``` list.setCellRenderer(new MyListRenderer()); ``` 4. 添加到容器: 将 JList 添加到容器即可显示出来: ``` JScrollPane scrollPane = new JScrollPane(list); frame.getContentPane().add(scrollPane); ``` 完整示例代码: ``` import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.ListCellRenderer; public class MyListRenderer implements ListCellRenderer<String> { public static void main(String[] args) { JFrame frame = new JFrame(); JList<String> list = new JList<String>(); DefaultListModel<String> model = new DefaultListModel<String>(); model.addElement("Item 1"); model.addElement("Item 2"); list.setModel(model); list.setCellRenderer(new MyListRenderer()); JScrollPane scrollPane = new JScrollPane(list); frame.getContentPane().add(scrollPane); frame.pack(); frame.setVisible(true); } public MyListRenderer() { } @Override public Component getListCellRendererComponent(JList<? extends String> list, String value, int index, boolean isSelected, boolean cellHasFocus) { JLabel label = new JLabel(); label.setText(value); if (isSelected) { label.setBackground(list.getSelectionBackground()); label.setForeground(list.getSelectionForeground()); } else { label.setBackground(list.getBackground()); label.setForeground(list.getForeground()); } label.setOpaque(true); return label; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值