0

我创建了这个脚本。我的问题是我想结束一行并继续下一行。我在这段特定的代码中使用了 flowlayout,并尝试了其他布局,例如网格,但没有占上风。请帮助,非常感谢示例,并在此先感谢您。这是我的代码:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class CardLayoutDemo implements ItemListener {
JPanel cards;
final static String BUTTONPANEL = "Card with JButtons";

public void addComponentToPane(Container pane) {

    JPanel card1 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    card1.add(new JLabel("Username:"));
    card1.add(new JTextField("Username", 10));
    card1.add(new JButton("Login")); //end line here

    card1.add(new JLabel("Password:"));
    card1.add(new JTextField("Password", 10));
    card1.add(new JButton("Register")); //end line here

    card1.add(new JCheckBox());
    card1.add(new JLabel("Remember credentials"));

    cards = new JPanel(new CardLayout());
    cards.add(card1, BUTTONPANEL);

    pane.add(new JPanel() {
        @Override
        public Dimension getPreferredSize() {
            return new Dimension(800, 200);
        }
    }, BorderLayout.CENTER);
    pane.add(cards, BorderLayout.PAGE_END);
}

public void itemStateChanged(ItemEvent evt) {
    CardLayout cl = (CardLayout)(cards.getLayout());
    cl.show(cards, (String)evt.getItem());
}

private static void createAndShowGUI() {
    JFrame frame = new JFrame("Login");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    CardLayoutDemo demo = new CardLayoutDemo();
    demo.addComponentToPane(frame.getContentPane());

    frame.pack();
    ImageIcon img = new ImageIcon("C:\\Users\\********\\Pictures\\settings-file-icon-2.png");
    frame.setIconImage(img.getImage());
    frame.setSize(850, 650);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

}

public static void main(String[] args) {

    try {

        UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
    } catch (UnsupportedLookAndFeelException ex) {
        ex.printStackTrace();
    } catch (IllegalAccessException ex) {
        ex.printStackTrace();
    } catch (InstantiationException ex) {
        ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    }

    UIManager.put("swing.boldMetal", Boolean.FALSE);

    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}

}

这是 jframe 当前的样子:当前画面

这就是我希望它看起来的样子:画面编辑

4

2 回答 2

1

正如我之前在您之前在几分钟前删除的相同问题中发布的那样:

我猜你对 GUI 底部的组件布局不满意。如果是这样,那么您将需要更改布局管理器的使用。考虑嵌套 JPanel,每个 JPanel 都使用自己的布局管理器,并通过这样做创建具有简单布局管理器的复杂 GUI。或者,如果您喜欢冒险,请尝试使用 GridBagLayout 为您的用户输入组件制作网格。再次查看您的代码,也许 GridBagLayout 将是您最好的选择。如果这样做,您的 JLabels 可以位于 [0, 0] 和 [0, 1] 处,而 JTextField 可以位于 [1, 0] 和 [1, 1] 处(分别对应于 gridx 和 gridy 位置的数字)。

您可以在此处阅读布局管理器的使用:

于 2013-11-01T21:45:01.800 回答
0

如果您只想设计您的 gui 然后对其进行编程,强烈建议使用 GUI 构建器(其中很多,例如 NetBeans)。如果您想手动编写 GUI,我会尝试使用几个 GridLayouts。使用一个将您的框架分成四个(GridLayout 2x2),然后将 JPanel 放入布局的右下部分,并在其上使用另一个 GridLayout 2x2 或 2x3,并将您的框和标签推到内部创建的适当“空间”面板。通过在其他此类面板中使用带有 GridLayouts 的面板,您可以获得对结果的大量控制,并且手动编写代码仍然相对容易。

当然,您可以使用 GridBagLayout,它可能为您提供最大的可能性,但手动设计和编码也相当困难(当然也可以手动编码)。

于 2013-11-01T22:04:55.000 回答