gpt4 book ai didi

Java (Swing) : JScrollPane. setBounds() 不适用?

转载 作者:行者123 更新时间:2023-11-29 03:57:35 25 4
gpt4 key购买 nike

我正在尝试创建一个带有滚动条的简单 JList,因此我需要将 JList 放在 JScrollPane 中。到目前为止,一切都很好。但是,出于某种原因,我无法调整 JScrollPane 的大小/位置!?它里面的所有东西都应该拉伸(stretch)到 100% 听起来合乎逻辑,所以如果我将 JScrollPane 设置为 300px 宽,里面的元素也会如此。对吗?

当你在做的时候,如果我应该改变或优化它,请批评并给我提示。

无论如何,这是代码:

package train;
import java.awt.*;
import javax.swing.*;

public class GUI {

private DefaultListModel loggerContent = new DefaultListModel();
private JList logger = new JList(loggerContent);

GUI() {
JFrame mainFrame = new JFrame("title");


this.addToLog("testing testing");
this.addToLog("another test");


// Create all elements
logger = new JList(loggerContent);

JScrollPane logWrapper = new JScrollPane(logger);
logWrapper.setBounds(10, 10, 20, 50);


// Add all elements
mainFrame.add(logWrapper);


// Show everything
mainFrame.setSize(new Dimension(600, 500));
mainFrame.setVisible(true);
}

public void addToLog(String inputString) {
int size = logger.getModel().getSize();
loggerContent.add(size, inputString);
}

}

提前致谢,键盘

编辑:这是它运行的屏幕截图:http://i.stack.imgur.com/sLGgQ.png

最佳答案

JListsetVisibleRowCount() 方法|对此特别方便,如相关 tutorial 中所建议. ListDemo就是一个很好的例子。

附录:

please critisize and give me hints…

好吧,既然你问了:不要在构造函数中调用公共(public)方法;将它们设为私有(private)或在 构造函数完成后调用它们。当 addElement() 可用时,无需为 add() 查找最后一个索引。此外,请务必在 event dispatch thread 上构建您的 GUI .

import java.awt.*;
import javax.swing.*;

/** @see http://stackoverflow.com/questions/5422160 */
public class ListPanel extends JPanel {

private DefaultListModel model = new DefaultListModel();
private JList list = new JList(model);

ListPanel() {
list.setVisibleRowCount(5);
}

public void append(String inputString) {
model.addElement(inputString);
}

private void init() {
for (int i = 0; i < 10; i++) {
this.append("String " + String.valueOf(i));
}
JFrame mainFrame = new JFrame("GUI");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane jsp = new JScrollPane(list);
mainFrame.add(jsp);
mainFrame.pack();
mainFrame.setVisible(true);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {
new ListPanel().init();
}
});
}
}

关于Java (Swing) : JScrollPane. setBounds() 不适用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422160/

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