【问题标题】:using JPanels without JFrame使用没有 JFrame 的 JPanel
【发布时间】:2015-09-12 11:43:47
【问题描述】:

我想知道是否可以在没有 JFrames 的情况下使用 JPanel,因为我正在制作一个要求编写故障报告的程序。我正在将 JOptionpane 用于新窗口,但每次我尝试向 textArea 添加滚动条时,它都会从屏幕上消失,但如果我在 JFrames 中这样做,它不会。我需要使用 JPanel,因为我在一帧中有 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);
}
}

【问题讨论】:

  • “我使用 null 作为布局,因为我将 setBounds 用于所有项目的位置” Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。在不同的语言环境中使用不同的 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them 以及 white space 的布局填充和边框。
  • “每次我尝试向 textArea 添加滚动条时,它都会从屏幕上消失” 我并不感到惊讶,正因为如此.. JTextArea textBoxFailReport = new JTextArea(); .建议以列和行为单位的大小(然后将其放在符合该大小的布局中)。像这样的东西..JTextArea textBoxFailReport = new JTextArea(40,10);

标签: java swing jframe jpanel jscrollbar


【解决方案1】:

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

使用空布局也不应该这样做。

【讨论】:

  • 如果我写喜欢,panel.add(pane);它从主面板中消失。我使用 null 作为布局,因为我将 setBounds 用于所有项目的位置
【解决方案2】:

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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多