【发布时间】:2019-08-07 18:48:35
【问题描述】:
我遇到了一个新问题,在寻找解决方案的同时,我已经将所有头发一直伸到头骨。 我在下面模拟了我的问题,(我不知道这是否是正常程序,但我倾向于简化以理解问题并尝试解决它)。 我需要将两列 JPanel 分成 70/30% 的部分。 用户将在这些单独的列中添加大量 JLabels 和 JTextField 等,所有不同的宽度。我不能使用 GridLayout,因为并非所有对象的宽度都相同。当用户插入太多对象时,我希望整个 JPanel 滚动。到目前为止,我已经实现了 3 个 JPanel,其中一个主要是 BoxLayout,其中有 2 个 FlowLayout JPanel,并且在每个子 JPanel 中我都添加了我的对象。问题是我希望将 JScrollPane 应用于 MainPanel,而不是单独应用于每个子 JPanel,否则会很难看。我不知道如何以 JScroll 适用于我的整个 MainPanel 的方式仅将 setSize 设置为宽度而不是高度。 谢谢和最好的问候
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class alignments {
Toolkit toolkit;
JFrame frame;
JPanel mainPanel, leftPanel, rightPanel;
public static void main(String[] args) {
alignments align = new alignments();
}
alignments() {
frame = new JFrame();
setDimm();
mainPanel = new JPanel();
leftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 5));
rightPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS));
leftPanel.setBackground(Color.gray);
leftPanel.setBorder(BorderFactory.createLineBorder(Color.red));
rightPanel.setBackground(Color.yellow);
rightPanel.setBorder(BorderFactory.createLineBorder(Color.CYAN));
// LEFT AREA BUTTONS
String[] arry = { "FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000",
"FIRST BUTTON", "3", "SECOND BUTTON", "4000", "FIRST BUTTON", "3", "SECOND BUTTON", "4000" };
for (int i = 0; i < arry.length; i++) {
JButton button = new JButton(arry[i]);
leftPanel.add(button);
}
String[] arry2 = { "WOW", "MEGA FAIN", "TURBO", "WOW", "MEGA FAIN", "TURBO", "WOW", "MEGA FAIN", "TURBO", "WOW",
"MEGA FAIN", "TURBO", "WOW", "MEGA FAIN", "TURBO", "WOW", "MEGA FAIN", "TURBO", "WOW", "MEGA FAIN",
"TURBO", "WOW", "MEGA FAIN", "TURBO", "WOW", "MEGA FAIN", "TURBO" };
for (int i = 0; i < arry2.length; i++) {
JLabel labels = new JLabel(arry2[i]);
rightPanel.add(labels);
}
// The problem I suspect is here because of course if I set the height
// then the scroll will not work anymore. If I don't set up the sizes
// then the first FlowLayout will cover 100% of the main JPanel.
leftPanel.setMaximumSize(new Dimension(600, 600));
leftPanel.setMinimumSize(new Dimension(600, 600));
leftPanel.setPreferredSize(new Dimension(600, 600));
rightPanel.setMaximumSize(new Dimension(200, 600));
rightPanel.setMinimumSize(new Dimension(200, 600));
rightPanel.setPreferredSize(new Dimension(200, 600));
mainPanel.add(leftPanel);
mainPanel.add(rightPanel);
JScrollPane pane = new JScrollPane(mainPanel);
frame.add(pane);
frame.setVisible(true);
}
void setDimm() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.getContentPane().setBackground(Color.white);
toolkit = frame.getToolkit();
Dimension size = toolkit.getScreenSize();
frame.setLocation((size.width - frame.getWidth()) / 2, (size.height - frame.getHeight()) / 2);
}
}
【问题讨论】:
-
我觉得 JTable 更适合您的需求。
标签: java swing jpanel flowlayout boxlayout