java - 我的 JTextArea 不考虑组件的大小并且被切断

标签 java swing

我已经为此工作了几个小时。老实说我无法弄清楚。我的 JTextArea 位于 JSplitPane 内,该 JSplitPane 位于带有 JButton 的 JPanel 内,所有内容都放在我的 JFrame 中。我正在使用布局管理器。我尝试过使用 pack()。我尝试过使用首选尺寸。如果没有 JPanel,我的按钮就不会显示在正确的位置,也不会在其他选项卡中切换按钮。使用 JPanel,它会切断我的所有文本,停止滚动功能(是的,我已经尝试将 TextAreas 设置为始终具有水平和垂直滚动条...并不能解决文本无明显原因停止换行的问题)。

public static void main(String[] args) throws IOException
{
    JFrame frame = new JFrame();

    Deck blackjack = new Deck(Deck.TYPE[0]);

    JTextArea textBlackjackUnshuffled = new JTextArea();
    JTextArea textBlackjackShuffle = new JTextArea();

    JButton shuffleButtonBlackjack = new JButton(new ImageIcon(ImageIO.read(new File("res/shuffle.png"))));

    JToolBar toolBarBlackjack = new JToolBar("Blackjack");

    JSplitPane splitPaneBlackjack = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);

    JPanel panel = new JPanel();

    JTabbedPane tabbedPaneBlackJack = new JTabbedPane();
    JTabbedPane tabbedPaneCanasta = new JTabbedPane();
    JTabbedPane tabbedPanePinochle = new JTabbedPane();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new BorderLayout());


    textBlackjackUnshuffled.setColumns(10);
    textBlackjackUnshuffled.setLineWrap(true);
    textBlackjackUnshuffled.setWrapStyleWord(true);
    textBlackjackUnshuffled.setEditable(false);
    textBlackjackUnshuffled.setFont(new Font("DejaVu Sans", Font.PLAIN, 100));
    textBlackjackUnshuffled.append(blackjack.toString());

    textBlackjackShuffle.setColumns(10);
    textBlackjackShuffle.setLineWrap(true);
    textBlackjackShuffle.setWrapStyleWord(true);
    textBlackjackShuffle.setEditable(false);
    textBlackjackShuffle.setFont(new Font("DejaVu Sans", Font.PLAIN, 100));
    textBlackjackShuffle.append(blackjack.toString());

    shuffleButtonBlackjack.setBorderPainted(false);
    shuffleButtonBlackjack.setFocusPainted(false);
    shuffleButtonBlackjack.setContentAreaFilled(false);

    splitPaneBlackjack.add(new JScrollPane(textBlackjackUnshuffled));
    splitPaneBlackjack.add(new JScrollPane(textBlackjackShuffle));

    panel.add(splitPaneBlackjack, BorderLayout.CENTER);
    panel.add(shuffleButtonBlackjack, BorderLayout.PAGE_END);

    tabbedPaneBlackJack.addTab("Blackjack", panel);

    frame.add(tabbedPaneBlackJack);
    frame.setSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));
    frame.setVisible(true);
}

最佳答案

您正在将 JScrollPanes 添加到面板的 BorderLayout 位置,但尚未将面板的布局管理器设置为 BorderLayout。在这种情况下,面板将使用 JPanel 的默认布局管理器 FlowLayout,该管理器不够智能,无法尊重滚动 Pane 的首选尺寸。

您的代码需要:

panel.setLayout(new BorderLayout());

关于java - 我的 JTextArea 不考虑组件的大小并且被切断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60240257/

相关文章:

java - 删除文本区域的水平滚动条

java - 除我以外的其他机器上的空指针异常

java - 为什么JButton不压抑?

Java - 将鼠标事件发送到Applet

java - 将数据导出到 csv 并使用 Java 和 Struts2 下载文件

java - 对 Querydsl 扩展感到困惑?

java - 数字解析库

java - 从 Class<? 中获取枚举实例使用字符串值扩展枚举>?

java - 访问 FrameLayout 时出现运行时异常

java - JTable隐藏网格线的方法