【发布时间】:2016-10-23 16:01:59
【问题描述】:
我正在用 Java 开发应用程序以进行测试(出于学习目的)。花了半天时间才想通连接到 Firebird DB。 现在我在构建 GUI 时遇到了问题。这是我的代码:
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.util.*;
public class ExamSettingsWindow extends JFrame {
JDialog examSettingsWindow = new JDialog(MainWindow.mainWindow, "Редагування екзамену", true);
JPanel mainPanel = new JPanel();
ArrayList<Question> questionsList = new ArrayList<Question>(Question.getQuestions());
ArrayList<JPanel> qaPanels = new ArrayList<JPanel>();
ExamSettingsWindow() {
for(Question q : questionsList)
{ // Some weird shit happenning in this loop, can't explain this, but i'm sure it will work someday...
JLabel qID = new JLabel(String.valueOf(q.getID()));
qID.setBorder(new EmptyBorder(2,2,2,2));
JLabel qText = new JLabel(q.getText());
qText.setBorder(new EmptyBorder(2,2,2,2));
JPanel qPanel = new JPanel();
qPanel.setLayout(new BoxLayout(qPanel, BoxLayout.X_AXIS));
qPanel.setBorder(new EmptyBorder(5,5,5,5));
qPanel.setMinimumSize(new Dimension(500,30));
qPanel.add(qID);
qPanel.add(qText);
JPanel aPanels = new JPanel();
aPanels.setLayout(new BoxLayout(aPanels, BoxLayout.Y_AXIS));
aPanels.setBorder(new EmptyBorder(5,5,5,5));
aPanels.setMinimumSize(new Dimension(500,30));
for (Question.Answer a : q.answersList) {
JLabel aID = new JLabel(a.getID());
aID.setBorder(new EmptyBorder(2,2,2,2));
JLabel aText = new JLabel(a.getText());
aText.setBorder(new EmptyBorder(2,2,2,2));
JPanel aPanel = new JPanel();
aPanel.setMinimumSize(new Dimension(500,30));
aPanel.setLayout(new BoxLayout(aPanel, BoxLayout.X_AXIS));
aPanel.add(aID);
aPanel.add(aText);
aPanels.add(aPanel);
}
JPanel qaPanel = new JPanel();
qaPanel.setMinimumSize(new Dimension(500,200));
qaPanel.setLayout(new BoxLayout(qaPanel, BoxLayout.Y_AXIS));
qaPanel.setBorder(new TitledBorder(new LineBorder(Color.black, 2),
"Питання "+String.valueOf(q.getID())));
qaPanels.add(qaPanel);
}
examSettingsWindow.setMinimumSize(new Dimension(500, 500));
examSettingsWindow.setMaximumSize(new Dimension(500, 500));
examSettingsWindow.setResizable(false);
examSettingsWindow.setDefaultCloseOperation(HIDE_ON_CLOSE);
examSettingsWindow.setLocationRelativeTo(null);
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
mainPanel.setMinimumSize(new Dimension(500,500));
for (JPanel p : qaPanels) {
mainPanel.add(p);
}
JScrollPane sc = new JScrollPane(mainPanel);
sc.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
examSettingsWindow.add(mainPanel);
}
public void initExamSettingsFrame(boolean vision) {
examSettingsWindow.setVisible(vision);
}
}
这是运行程序后显示的图片: >>click<<
我认为问题可能出在包含具有相同名称的 JPanel 的 ArrayList 中,但我不确定,当我在寻找原因和解决方案时,我的脑袋正在爆炸。 请帮助...给我正确的方向...
附:我的代码并不完美,不要怪我。我只是想学习Java。
【问题讨论】:
-
1) 为了尽快获得更好的帮助,请发帖 minimal reproducible example 或 Short, Self Contained, Correct Example。 (该代码至少需要一个
main(String[])方法才能成为 MCVE/SSCCE。) 2) 提供 ASCII 艺术或 GUI 的 预期 布局的最小尺寸的简单绘图,如果可调整大小,具有更多的宽度和高度。 3)见Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?(是的。) -
谢谢,我以后会听从你的建议的。
标签: java swing user-interface arraylist