gpt4 book ai didi

java - JPanel 内的 JPanel 的 JScrollPane

转载 作者:搜寻专家 更新时间:2023-11-01 02:44:53 25 4
gpt4 key购买 nike

看完this answer ,我来到了using getPreferredSize instead of setPreferredSize .但是我仍然无法使用 @Override getPreferredSize,但这不是我现在面临的主要问题。

我有一个 CardLayout 应用程序,它调用一个名为 HiraganaData 的类

HiraganaData 是一个扩展 JPanel 的类,因此它可以被 CardLayout 使用,但它还有 2 个 上面有 JPanel,一个用于“后退”按钮,一个用于其余按钮,在使用这个想法之前,我使用的是 JTable,但在将单元格制作为按钮时遇到了问题,所以我放弃了这个想法,来了这个新的使用 GridLayout。一些按钮将被禁用,无论如何我可以做到这一点并且不会包含该代码,因为它不相关。

所以我的实际问题是:

  • 如何添加 JScrollPane buttonsPanel,尽我所能尝试将其添加到整个“全局” Pane ,但没有成功。

这是我可以用我的类的相同代码完成的最接近的 GUI,我只是向它添加了一个 JFrame。

不确定是否相关,但我正在使用不同尺寸的 CardLayout,@MadProgrammer 在 this answer 上建议的方式.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.*;
import javax.swing.table.TableCellRenderer;
import javax.swing.DefaultCellEditor;
import java.awt.Dimension;

public class HiraganaPage extends JPanel {
JFrame frame = new JFrame("Hello");
JButton kanas[][] = new JButton[26][5];
JButton backButton = new JButton("back");
JPanel backPanel = new JPanel();
JPanel buttonsPanel = new JPanel();

public static void main(String args[]) {
new HiraganaPage();
}

public HiraganaPage() {
JPanel pane = new JPanel();
backPanel.add(backButton);
buttonsPanel.setLayout(new GridLayout(0, 5));
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
pane.add(backPanel);

//pane.setPreferredSize(new Dimension(500, 500));

for (int i = 0; i < 26; i++) {
for (int j = 0; j < 5; j++) {
kanas[i][j] = new JButton("1");
buttonsPanel.add(kanas[i][j]);
}
}

JScrollPane scroll = new JScrollPane(buttonsPanel);
pane.add(buttonsPanel);
this.add(pane, BorderLayout.CENTER);
frame.add(this);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(50, 50);
frame.setSize(300, 300);
}
}

这是我完整应用程序的样子

enter image description here

这就是它在 MCVE 中的样子。

enter image description here

最佳答案

您面临的主要问题是,当您将 buttonsPane 添加到 pane 时,您从滚动 Pane 中删除了它...

JScrollPane scroll = new JScrollPane(buttonsPanel);
pane.add(buttonsPanel);
this.add(pane, BorderLayout.CENTER);

事实上,您实际上从未将滚动 Pane 添加到任何内容也无济于事。

一个组件可能只有一个父组件,所以当您将 buttonsPane 添加到 pane 时,它会有效地从滚动 Pane 中移除

相反,将 HiraganaPage 的布局管理器设置为 BorderLayout,将 buttonsPanel 添加到滚动 Pane 并将滚动 Pane 添加到HiraganaPageCENTER位置,然后将pane添加到HiraganaPageNORTH位置>

Buttons

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestScrollPane {

public static void main(String[] args) {
new TestScrollPane();
}

public TestScrollPane() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new HiraganaPage());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class HiraganaPage extends JPanel {

JFrame frame = new JFrame("Hello");
JButton kanas[][] = new JButton[26][5];
JButton backButton = new JButton("back");
JPanel backPanel = new JPanel();
JPanel buttonsPanel = new JPanel();

public HiraganaPage() {
setLayout(new BorderLayout());

JPanel pane = new JPanel();
backPanel.add(backButton);
buttonsPanel.setLayout(new GridLayout(0, 5));
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
pane.add(backPanel);

// pane.setPreferredSize(new Dimension(500, 500));

for (int i = 0; i < 26; i++) {
for (int j = 0; j < 5; j++) {
kanas[i][j] = new JButton("1");
buttonsPanel.add(kanas[i][j]);
}
}

add(pane, BorderLayout.NORTH);
add(new JScrollPane(buttonsPanel));
}

@Override
public Dimension getPreferredSize() {
return new Dimension(500, 500);
}
}

}

关于java - JPanel 内的 JPanel 的 JScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24987832/

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