【问题标题】:How to implement pages in Java Swing app.?如何在 Java Swing 应用程序中实现页面?
【发布时间】:2018-11-23 21:50:37
【问题描述】:

我在 Java 创建应用程序方面有一些经验,并且想了解更多信息,因此决定创建一个具有不同页面的应用程序。例如,初始框架将显示一个按钮菜单,这些按钮将导致不同的框架,显示不同的组件和布局。

我不太确定实现页面的最佳做法。我想我可以将JFrame 窗口存储在一个列表中,然后使用按钮处理程序类来更改不同框架的可见性,仅在用户单击按钮时才允许相关框架可见。我认为这种方法可行,但有没有更有效/更实用的方法呢?

我知道CardLayout,但是对于这个程序,我正在努力学习MigLayout;所以这是不可能的(据我所知)。我希望这个问题不会太模糊,我只是想知道在 Java 中创建具有不同页面的应用程序时的最佳实践。

【问题讨论】:

  • 1) 是的,您可以使用 CardLayout。 CardLayout 的面板是“父”面板。然后你有你添加到 CardLayout 的子面板。这些面板可以使用他们想要的任何布局管理器。 2)不要使用多帧。如果您需要单独的窗口,那么您应该使用 JDialog 作为子窗口。
  • 您“可能”通过多种方式做到这一点。 CardLayout 当然是一种选择,但并不总是适合所有情况(从来没有)。有时您需要“推出自己的”解决方案,它可能使用模型和控制器来管理视图集合。这在本质上会更具动态性,但需要您做更多的工作才能使其发挥作用

标签: java swing user-interface layout-manager


【解决方案1】:

可以使用选项卡式窗格,最适合存储页面。

https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html

我还注意到您需要正确考虑顶级容器,因为您不需要每次都为每个页面创建一个 JFrame,至少在必要时(例如:一个编辑器,创建一个新窗口,以便你需要创建一个新的 JFrame,在你的情况下我不这么认为)所以请考虑下面的链接。

https://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html

【讨论】:

    【解决方案2】:

    JInternalFrame 是 Java Swing 的一部分。 JInternalFrame 是一个容器,提供框架的许多功能,包括显示标题、打开、关闭、调整大小、支持菜单栏等。Internal frames with components example

    创建多个内部框架的代码:

    import java.awt.event.*; 
    import java.awt.*; 
    import javax.swing.*; 
    
    class solution extends JFrame { 
    
    // frame 
    static JFrame f; 
    
    // label to diaplay text 
    static JLabel l, l1; 
    
    // main class 
    public static void main(String[] args) { 
        // create a new frame 
        f = new JFrame("frame"); 
    
        // set layout of frame 
        f.setLayout(new FlowLayout()); 
    
        // create a internal frame 
        JInternalFrame in = new JInternalFrame("frame 1", true, true, true, true); 
    
        // create a internal frame 
        JInternalFrame in1 = new JInternalFrame("frame 2", true, true, true, true); 
    
        // create a Button 
        JButton b = new JButton("button"); 
        JButton b1 = new JButton("button1"); 
    
        // create a label to display text 
        l = new JLabel("This is a JInternal Frame no 1  "); 
        l1 = new JLabel("This is a JInternal Frame no 2  "); 
    
        // create a panel 
        JPanel p = new JPanel(); 
        JPanel p1 = new JPanel(); 
    
        // add label and button to panel 
        p.add(l); 
        p.add(b); 
        p1.add(l1); 
        p1.add(b1); 
    
        // set visibility internal frame 
        in.setVisible(true); 
        in1.setVisible(true); 
    
        // add panel to internal frame 
        in.add(p); 
        in1.add(p1); 
    
        // add internal frame to frame 
        f.add(in); 
        f.add(in1); 
    
        // set the size of frame 
        f.setSize(300, 300); 
    
        f.show(); 
    } 
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-05
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 2012-11-04
      • 2012-12-30
      • 1970-01-01
      • 2011-02-16
      相关资源
      最近更新 更多