【问题标题】:Java Swing - Show multiple panelsJava Swing - 显示多个面板
【发布时间】:2021-12-26 13:59:01
【问题描述】:

我在 IntelliJ 中使用 Java Swing UI 设计器 :( 我在设计器中使用多个面板和带有 1 个父面板的间隔器设计了一些东西。当我添加主面板时,它里面的第一个显示,但其他没有不。

框架结构:

  • 面板1
    • 渐变面板
      • 面板
      • 垫片

我设计的

我得到了什么

import keeptoo.KGradientPanel;

import javax.swing.*;

public class LogIn extends JFrame{
private KGradientPanel KGradientPanel1; //Automatically added by the designer
private JPanel panel1; //Automatically added by the designer

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setTitle("CarbonTec Dashboard");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.setSize(1800,1000);
    frame.setContentPane(new LogIn().panel1);
    frame.setVisible(true);

    ImageIcon imageIcon = new ImageIcon("Icon.png");
    frame.setIconImage(imageIcon.getImage());
}
}

【问题讨论】:

  • 旁注:设置通过setVisible(true) 可见的JFrame 应该作为添加所有组件并设置GUI 后的最后一步。另外,如果您实际上不想更改框架功能,请不要extends JFrame
  • (1-) @Tom6468 发明 Java Swing 是最糟糕的事情 - 不要怪工具,要怪木匠。 Swing 非常易于使用。您发布的代码什么也没告诉我们。它甚至没有显示将渐变面板添加到框架或将子面板添加到渐变面板。此外,不建议使用 UI 设计器。你把时间花在了学习设计师而不是学习 Swing 上。

标签: java swing intellij-idea


【解决方案1】:

首先你需要知道你的类是一个JFrame,但是在main方法中你创建了一个新的JFrame。

最好有一个具有 main 方法的类 Program。在这个 main 方法中,您创建了一个新的 LogIn 实例。

Program 类可能如下所示:

public class MainProgram {

  public static void main(String[] args) {
    LogIn logIn = new LogIn();
  }
}

LogIn 类应如下所示:

    import keeptoo.KGradientPanel;
    import javax.swing.*;

    public class LogIn extends JFrame{
    private KGradientPanel KGradientPanel1 = new KGradientPanel(); //Automatically added by the designer
    private JPanel panel1 = new JPanel(); //Automatically added by the designer
    

    // This is the constructor.
    public LogIn {
    
        setTitle("CarbonTec Dashboard");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setSize(1800,1000);
        setContentPane(panel1);
    
        ImageIcon imageIcon = new ImageIcon("Icon.png");
        setIconImage(imageIcon.getImage());

        // Here you can add the gradient panel to panel1.
        panel1.add(KGradientPanel1); // The name should be written in lower case.
       
        setVisible(true);
    }

但我不知道为什么需要panel1,你可以直接添加KGradientPanel。

【讨论】:

  • 我做了所有这些,但现在它只是全白了。 IntelliJ 说 JPanel 和 KGradientPanel 被生成的代码覆盖,可能是内置设计器。当我删除那部分时,它又回到了原来的位置
  • 然后看起来你的登录是整个窗口。然后要将面板添加到此框架,您必须使用方法getContentPane().add(Component c)。我不知道右边是哪个面板(黑色)。
  • 这是设计器中的结构:imgur.com/a/F396YY1 灰色面板在渐变面板内。问题是它没有出现在 java 类中
  • 好的,那么看起来您的 panel1 是您的主面板。所以你必须给这个面板一个布局,以便能够在上面放置元素。如果不指定布局,那就是 FlowLayout,就是元素的排列方式。因此,白/黑面板位于 GradientPanel 旁边。将 panel1 替换为 GradientPanel,使其位于后台。然后你必须给 GradientPanel 一个布局来放置白色/黑色。如果无法替换 panel1,则需要给 GradientPanel 一个布局,然后在其顶部添加白/黑面板。
  • 感谢您的帮助,它只是不起作用。 Java Swing 的发明是这个世界上发生过的最糟糕的事情。我要卸载它,否则我可能会打我的显示器。
猜你喜欢
  • 2012-11-05
  • 2010-10-25
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
相关资源
最近更新 更多