我也看过这个问题,但没有帮助:添加JPanel时JScrollPane不显示滚动条
使用空布局是有意的,我正在做我自己的格式化,而不是考虑多个大小的屏幕。提前感谢!
class FilesPanel extends JPanel
{
public JScrollPane scroller;
private FileHolderPanel holder;
public FilesPanel()
{
//setLayout(null);
setBackground(extraLight);
holder = new FileHolderPanel();
System.out.println(holder.getWidth() + " " + holder.getHeight() + " " + holder.getX() + " " + holder.getY() + " " + holder.getBounds());
scroller = new JScrollPane();
JViewport viewport = new JViewport();
viewport.add(holder);
scroller.setViewport(viewport);
scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scroller.setBorder(BorderFactory.createEmptyBorder());
scroller.setBackground(blue);
add(scroller);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
scroller.setLocation(0, 0);
scroller.setSize(filesWidth, frame.getHeight() - 40);
}
class FileHolderPanel extends JPanel
{
public FileHolderPanel()
{
setBackground(extraLight);
setLayout(null);
setVisible(true);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
}
}
}
“主要”问题是FileHolderPanel
不知道它可能希望的大小,因此JScrollPane
不知道它需要多大,也不知道它应该何时显示滚动条。这是一个猜测工作,因为您没有提供一个完全可运行的示例。
下面的例子很好...
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new ContentPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class ContentPane extends JPanel {
public ContentPane() {
setLayout(new BorderLayout());
JScrollPane scrollPane = new JScrollPane(new FileHolderPane());
scrollPane.setBorder(BorderFactory.createEmptyBorder());
scrollPane.setBackground(Color.BLUE);
add(scrollPane);
}
}
public class FileHolderPane extends JPanel {
public FileHolderPane() {
setBackground(Color.RED);
setLayout(new GridBagLayout());
add(new JLabel("All your content is belong to us"));
}
@Override
public Dimension getPreferredSize() {
// This will make the panel a fixed size, so beware of that
return new Dimension(400, 400);
}
}
}
如果您需要更多的控制,那么您可能需要查看可滚动
接口
,但这是另一个复杂程度
我注意到在添加滚动条时会调整高度内容的大小(因为内容超过了宽度)。 密码... 注意:如果我使用,它会在最大化窗口时增加边框之间的间距,我不希望这样。 正如您所看到的,第2行被切断了,是否有必要不调整它的大小(除了将它设置为,如果最大化窗口,它仍然显示条形)?
问题内容: 在Java应用程序中使用时,我遇到了一个小问题。 我有一个。这被动态地与按钮(垂直排序),其可以是任何宽度的更新。的自动调整其宽度最大的部件内部。 现在,当出现垂直滚动条时,它会占用my右侧的一些空间,这将导致最大的按钮无法完全显示。除了显示整个按钮之外,我不想使用水平滚动条。 当滚动条出现时,是否有办法调整我的大小,使其很好地显示在我的按钮旁边?还是有其他方法可以使滚动条出现在我的旁
问题内容: 将矩形放在QGraphicsScene中并使其可以用鼠标移动后,如何用鼠标调整大小? 如果没有人知道答案,那么一个例子也可能很好,我正在使用PyQt4在Python中进行开发。 我知道这里有类似的问题,但它们分别没有回答我。 我的简化代码: 问题答案: 您将需要自己调整大小。要做到这一点,你需要继承和实现鼠标事件处理函数:,,。总体思路如下: 您创建了一组手柄,可用于调整形状的大小。
问题内容: 如本问题所述(将图像包装到Jframe中),我需要一个jframe来匹配提供的确切图像(图像本身最初是已转换为图像的PDF) 所提供的解决方案确实为我的图像尺寸构建了一个jframe,但实际上看不到所有图像。我需要能够调整jframe的大小,并使图像动态调整为新的jframe大小。失败的话,我想如果我可以滚动jframe或什至放大或缩小,至少可以到达当前无法看到的图像部分。 我需要这个
正如在这个问题中讨论的(将图像包装到Jframe),我需要一个Jframe来匹配精确提供的图像(图像本身最初是一个PDF,已经转换为图像)