使用没有JFrame的JPanel

时间:2015-09-12 11:43:48

标签: java swing jframe jpanel jscrollbar

我想知道是否可以在没有JFrame的情况下使用JPanel,因为我正在编写一个要求编写失败报告的程序。我正在使用JOptionpane进行新窗口,但每次我尝试向textArea添加一个滚动条时,它就会从屏幕上消失,但如果我在JFrames中这样做,它就不会。我需要使用JPanels,因为我在一个框架中有2个Jpanel,并且每个人都必须分别有一个滚动条,请帮助感谢.......

public class aa {
    private static JScrollPane pane;
public static void main(String[] arg){

    JPanel panel = new JPanel();
    panel.setPreferredSize(new Dimension(425, 400));
    panel.setLayout(null);
    JLabel labelName= new JLabel("Name and Surname");
    JTextField textFieldName = new JTextField();
    JLabel labelFailSubject= new JLabel("Fail Subject");
    JTextField textFieldFailSubject = new JTextField(15);
    JLabel labelTime= new JLabel("Fail Time");
    JTextField textFieldFailTime = new JTextField(8);
    JLabel labelFailDate = new JLabel("Fail Date");
    JTextField textFieldFailDate= new JTextField(8);
    JLabel labelFailReport= new JLabel("Fail Report");
    JTextArea textBoxFailReport = new JTextArea();
    pane = new JScrollPane(textBoxFailReport);

    panel.add(labelName);
    panel.add(textFieldName);   
    panel.add(labelFailDate);
    panel.add(textFieldFailDate);
    panel.add(labelTime);
    panel.add(textFieldFailTime);
    panel.add(labelFailSubject);
    panel.add(textFieldFailSubject);
    panel.add(labelFailReport);
    panel.add(textBoxFailReport);
    textBoxFailReport.setLineWrap(true);

    JOptionPane.showMessageDialog(null, panel, "Fail Report", JOptionPane.PLAIN_MESSAGE);
}
}

2 个答案:

答案 0 :(得分:1)

您创建了一个包含文本区域的JScrollPane,但您不是将此scrollPane添加到主面板,而是直接添加textarea。这样就可以从其滚动窗格父项中删除textarea并将其添加到主面板中。因此根本不使用滚动窗格。

使用空布局也不是你应该做的事情。

答案 1 :(得分:0)

JPanel换成JScrollPane,然后将其添加到JOptionPane。这应该可以解决问题。

更新

以下是示例代码。我在这里使用了GridLayout

private static JScrollPane pane;

public static void main(String[] arg) {

    JPanel panel = new JPanel();
    panel.setPreferredSize(new Dimension(425, 400));
    panel.setLayout(new GridLayout(5, 2));//Grid Layout with 5 rows, 2 columns used
    JLabel labelName = new JLabel("Name and Surname");
    JTextField textFieldName = new JTextField();
    JLabel labelFailSubject = new JLabel("Fail Subject");
    JTextField textFieldFailSubject = new JTextField(15);
    JLabel labelTime = new JLabel("Fail Time");
    JTextField textFieldFailTime = new JTextField(8);
    JLabel labelFailDate = new JLabel("Fail Date");
    JTextField textFieldFailDate = new JTextField(8);
    JLabel labelFailReport = new JLabel("Fail Report");
    JTextArea textBoxFailReport = new JTextArea();

    panel.add(labelName);
    panel.add(textFieldName);
    panel.add(labelFailDate);
    panel.add(textFieldFailDate);
    panel.add(labelTime);
    panel.add(textFieldFailTime);
    panel.add(labelFailSubject);
    panel.add(textFieldFailSubject);
    panel.add(labelFailReport);
    panel.add(textBoxFailReport);
    textBoxFailReport.setLineWrap(true);

    pane = new JScrollPane(panel);//JPanel is wrapped with JScrollPane

    JOptionPane.showMessageDialog(null, pane, "Fail Report", JOptionPane.PLAIN_MESSAGE);//JScrollPane is added to the JOptionPane
}