gpt4 book ai didi

Java:JScrollPane满了就消失

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:54 24 4
gpt4 key购买 nike

我想查看有关我程序中某些对象的一些信息。为此,我正在为每个对象创建一个 JPanel 及其信息。这些面板一起打包在我添加到 ScrollPane 的面板中。

如果只有几个对象,那么工作完美,因此所有信息都可以在不滚动的情况下显示。一旦有更多,整个面板就会以最小化的方式消失。

很抱歉,我无法提取一个小代码片段来重现错误。我把它做得尽可能小。所以我必须给你三个类:

程序:创建对象的 TreeMap 并对其进行处理。这里只是初始化一个整数列表。

   import java.util.TreeMap;




public class Program {


// Set ObjectNumber here!
static int numberObjects = 32;


static TreeMap<Integer, Integer> objects = new TreeMap<Integer, Integer>();

static TestFrame frame;

public static void main(String[] args) {

init();

}

public static void init() {

for (int i=0; i < numberObjects; i++) {
objects.put(i, i);
}

frame = new TestFrame(objects);

frame.repaint();

}


}

TestFrame:它扩展 JFrame,将其自身设置为最大化和边框布局。之后,它从我的类 TestPanel 中向东添加一个 JPanel。

 import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.Frame;

import java.util.TreeMap;

import java.awt.GridLayout;

import java.awt.Toolkit;

import java.util.TreeMap;


import javax.swing.JFrame;


public class TestFrame extends JFrame {


TreeMap<Integer, Integer> objects;

TestPanel testPanel;

public TestFrame(TreeMap<Integer, Integer> objects) {

this.objects = objects;
setTitle("Program");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setExtendedState(Frame.MAXIMIZED_BOTH);

init();

}

public void init() {

setLocationRelativeTo(null);
setLayout(new BorderLayout());

testPanel = new TestPanel(objects);
this.add(testPanel, BorderLayout.EAST);

setVisible(true);

}


}

TestPanel:它扩展了 JPanel。遍历所有对象并将具有整数值的标签添加到数组名称[]。然后再次为每个对象构建一个仅为此对象的面板,添加一个面板,其中包含文本“名称:”和名称 [] 数组中的标签。使用 GridBagLayout。现在它将对象的所有面板打包在一个面板“innerPanel”中。这被添加到滚动 Pane 中。滚动 Pane 被添加到类 (TestPanel)。

import java.util.TreeMap;


import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.SwingConstants;


import java.awt.Font;

import java.awt.Graphics;

import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;

import java.awt.GridLayout;

import java.awt.Label;


import javax.swing.BorderFactory;


public class TestPanel extends JPanel {

GridBagConstraints gridBagConstraints = new GridBagConstraints();

TreeMap<Integer, Integer> objects;

Label[] names;

JPanel[] objectPanel;

JPanel innerPanel;

Font fontLabelName = new Font("Arial", Font.BOLD, 20);



public TestPanel (TreeMap<Integer, Integer> objects) {

this.objects = objects;

names = new Label[objects.size()];

objectPanel = new JPanel[objects.size()];

this.setLayout(new GridBagLayout());

for(int i=0; i<objects.size(); i++) {
Label tempLabel = new Label(Integer.toString(objects.get(i)), SwingConstants.LEFT);
tempLabel.setFont(fontLabelName);
names[i]=tempLabel;
}

for (int i=0; i<objects.size(); i++) {

JPanel tempPanel = new JPanel();
tempPanel.setLayout(new GridBagLayout());
objectPanel[i] = tempPanel;

gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.gridheight = 1;
Label nameLabel = new Label("Name: ", SwingConstants.LEFT);
nameLabel.setFont(fontLabelName);
objectPanel[i].add(nameLabel, gridBagConstraints);

gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.gridheight = 1;
objectPanel[i].add(names[i], gridBagConstraints);
}

innerPanel = new JPanel();
innerPanel.setLayout(new GridLayout(0,1));

for (int i = 0; i<objects.size(); i++) {
innerPanel.add(objectPanel[i]);
}

JScrollPane scrollPane = new JScrollPane(innerPanel);
// scrollPane.setBorder( BorderFactory.createEmptyBorder() );
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

this.add(scrollPane);

}

}

如屏幕截图所示,我的屏幕分辨率为 31 个对象,效果完美,但如果我使用 32 个对象,滚动 Pane 几乎消失。

31 objects

32 objects

如果有人可以帮助我解决它或链接匹配的帖子,我将非常感激 - 我无法通过 google/search 找到。

最佳答案

尝试在您的 TestPanel 中设置不同的布局。如果您打算只在面板中添加一个对象(在您的例子中是 scollpane),并且您希望该对象占据面板的所有空间,BorderLayout 是一个不错的选择。

this.setLayout(new BorderLayout());

关于Java:JScrollPane满了就消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35131009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com