如何在Java Swing应用程序中实现页面?

时间:2018-11-23 21:50:38

标签: java swing user-interface layout-manager

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

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

我知道CardLayout,但是对于这个程序,我正在尝试学习MigLayout;因此,据我所知,这将是不可能的。我希望这个问题不要太含糊,我只是想了解有关在Java中创建具有不同页面的应用程序的最佳实践。

2 个答案:

答案 0 :(得分:0)

可以使用选项卡式窗格,这是存储页面的最佳选择。

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

我还注意到您需要适当考虑顶级容器,因为您不必每次都为每个Page创建一个JFrame,至少在必要的情况下(例如:编辑器,创建一个新窗口,您需要创建一个新的JFrame(对于您而言,我认为不是),因此请考虑下面的链接。

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

答案 1 :(得分:0)

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(); 
} 
}