gpt4 book ai didi

Java Swing : Nested Tabs and Layouts

转载 作者:行者123 更新时间:2023-11-29 07:12:25 37 4
gpt4 key购买 nike

我遇到了下一个 JTabbedPanes 的问题,这让我很困惑。我已将问题隔离到一个简短的演示应用程序中(基于 oracle 选项卡式 Pane 教程):

package main.java;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class TabbedPaneDemo extends JPanel {

public static JTabbedPane topTabs = new JTabbedPane();

public TabbedPaneDemo() {
super(new BorderLayout());

topTabs.setPreferredSize(new Dimension(400, 200));

topTabs.add(makeReadoutPanel("\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15"));

add(topTabs);
}

private static JTabbedPane makeReadoutPanel(String text) {
// Create tabbed pane
JTabbedPane tabs = new JTabbedPane();
tabs.setName("Tabs");

// Create text field
JTextArea textArea = new JTextArea(text);
textArea.setEditable(false);
textArea.setFont(new Font("Monospaced", Font.PLAIN, 14));

// Create first panel for text field
JPanel textPanel = new JPanel();
textPanel.setLayout(new BorderLayout());
textPanel.setName("Text Panel");
textPanel.add(textArea, BorderLayout.CENTER);

// Add text field panel to tabs
tabs.add(textPanel);

return tabs;
}

private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("TabbedPaneDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Add content to the window.
frame.add(new TabbedPaneDemo(), BorderLayout.CENTER);

//Display the window.
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
//Schedule a job for the event dispatch thread:
//creating and showing this application's GUI.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//Turn off metal's use of bold fonts
UIManager.put("swing.boldMetal", Boolean.FALSE);
createAndShowGUI();
}
});
}
}

运行时,JTextArea 被切断,没有滚动条,而不是垂直适合面板。 textPanel 中的 BorderLayout 不应该使文本区域大小适合选项卡吗?这只发生在嵌套的选项卡上:如果我只使用一个级别的选项卡,文本区域将适合。

最佳答案

您需要将 JTextArea 添加到 JScrollBar 的视口(viewport),然后将其添加到 JTabbedPane 持有的组件。

JPanel textPanel = new JPanel();
textPanel.setLayout(new BorderLayout());
textPanel.setName("Text Panel");

// **** note change:
textPanel.add(new JScrollPane(textArea), BorderLayout.CENTER);

请注意,有两种常见的方法可以将组件(此处为 JTextArea)添加到视口(viewport)中。一种是如上所述将其传递到 JSrollPane 的构造函数中,另一种是在已创建的 JScrollPane 上调用 setViewportView(...),将组件传递到方法的参数中。无论您做什么,都不要将 JTextArea 传递到已使用其 add(...) 方法创建的 JScrollPane 中,因为您将删除滚动 Pane 的 veiwport,这将阻止它正常工作。

关于Java Swing : Nested Tabs and Layouts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12675872/

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