阅读这篇答案后,我决定使用getPreferredSize而不是setPreferredSize。但我仍然无法使用@Override getPreferredSize
,但这目前不是我面临的主要问题。
我有一个CardLayout应用程序,调用一个名为HiraganaData的类
HiraganaData是一个扩展了JPanel
的类,以便可以被CardLayout
使用,但它还有另外两个JPanel
,一个用于“返回”按钮,另一个用于其余的按钮,在使用这个想法之前,我正在使用JTable,但在将单元格制作为按钮时遇到了问题,所以我放弃了这个想法,并提出了这个新想法,使用GridLayout
。其中一些按钮将被禁用,不管怎样我都可以做到这一点,并且不会包含那段代码,因为它与问题无关。
因此,我的实际问题或问题是:
- 如何将
JScrollPane
仅添加到buttonsPanel
,我尽了最大努力,甚至将其添加到整个“全局”面板中都没有成功。
这是我可以用我的类的相同代码做出的最接近GUI。
不确定是否相关,但我正在使用具有不同大小的CardLayout
,方式是在此答案中由@MadProgrammer建议的方式。
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](https://istack.dev59.com/2FpE8.webp)
![enter image description here](https://istack.dev59.com/AssXW.webp)
pane.setPreferredSize(new Dimension(500, 500));
这一行吗?注释掉了,看起来更好了,但滚动条也不会出现。 - FrakcoolsetPreferred/Minimum/MaximumSize
,因为它会引起更多问题而不是解决问题,而是覆盖所需的适当方法。 - MadProgrammer