- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几个窗口,就像向导一样。其中一些使用标准的 BorderLayout,一些使用 TableLayout。如果单击“下一步”按钮,将出现下一个窗口。我读到最好的方法是使用 CardLayout。但我不知道我应该如何将它们“链接”在一起。这是第一个窗口:
public class Identification extends JPanel implements ActionListener {
static String next = "Next";
JButton nextButton;
final static int BIG_BORDER = 75;
final static int SMALL_BORDER = 10;
final static int ELEMENTsLENGHT = 320;
final static int VERTICAL_SPACE = 10;
final static int VERTICAL_SPACE_PLUS = 25;
final static int HORIZONTAL_SPACE = 75;
final static int SPACEforELEMENT_LABEL = 50;
final static int SPACEforELEMENT_TEXT = 40;
final static int H_SPACEforBUTTON = 64;
final static int V_SPACEforBUTTON = 26;
private JTextField nameField = new JTextField();
private JTextField surnameField = new JTextField();
public Identification() {
init();
}
public void init() {
JLabel nameLabel = new JLabel("Please enter your name:");
JLabel surnameLabel = new JLabel("Please enter your surname:");
nameLabel.setForeground(Color.green);
surnameLabel.setForeground(Color.green);
Font labelFont = new Font("SansSerif", Font.PLAIN, 24);
nameLabel.setFont(labelFont);
surnameLabel.setFont(labelFont);
nameField.addActionListener(this);
surnameField.addActionListener(this);
Font TfieldFont = new Font("SansSerif", Font.PLAIN, 16);
nameField.setFont(TfieldFont);
surnameField.setFont(TfieldFont);
nextButton = new JButton("NEXT");
nextButton.setActionCommand(next);
nextButton.addActionListener(this);
nextButton.setToolTipText("Click this button to continue.");
JPanel panelButton = new JPanel();
panelButton.add(nextButton);
double size[][] = {
{ BIG_BORDER, ELEMENTsLENGHT, HORIZONTAL_SPACE,
H_SPACEforBUTTON, SMALL_BORDER }, // Columns
{ BIG_BORDER, SPACEforELEMENT_LABEL, VERTICAL_SPACE,
SPACEforELEMENT_TEXT, VERTICAL_SPACE_PLUS,
SPACEforELEMENT_LABEL, VERTICAL_SPACE,
SPACEforELEMENT_TEXT, VERTICAL_SPACE_PLUS,
SPACEforELEMENT_LABEL, VERTICAL_SPACE,
V_SPACEforBUTTON, SMALL_BORDER } }; // Rows
setLayout(new TableLayout(size));
setBackground(Color.darkGray);
add(nameLabel, "1,1,1,1");
add(nameField, "1,3,1,1");
add(surnameLabel, "1,5,1,1");
add(surnameField, "1,7,1,1");
add(nextButton, "3,11,1,1");
} // end init
public static void createAndShowGUI() {
JFrame frame = new JFrame("Identification");
frame.getContentPane().add(new Identification());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(550, 450);
frame.setResizable(false);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equalsIgnoreCase(next)) {
Identification.showNextWindow();
}
}
public static void showNextWindow() {
// instead of println - show the next window
System.out.println("go to the next window");
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
} // end class Id
这是第二个:
public class NewUser extends JPanel implements ActionListener {
static String yes = "<html><font size=\"+1\"><font color=\"#00FF00\">Yes</font></html>";
static String no = "<html><font size=\"+1\"><font color=\"#00FF00\">No</font></html>";
static String next = "Next";
JRadioButton yesButton;
JRadioButton noButton;
JButton nextButton;
boolean choice = false;
boolean isNew;
public NewUser() {
super(new BorderLayout());
init();
}
public void init() {
yesButton = new JRadioButton(yes);
yesButton.setOpaque(false);
yesButton.setActionCommand(yes);
noButton = new JRadioButton(no);
noButton.setOpaque(false);
noButton.setActionCommand(no);
ButtonGroup group = new ButtonGroup();
group.add(yesButton);
group.add(noButton);
nextButton = new JButton("NEXT");
nextButton.setActionCommand(next);
yesButton.addActionListener(this);
noButton.addActionListener(this);
nextButton.addActionListener(this);
nextButton.setToolTipText("Click this button to continue.");
String q = "Hello name surname,<br>Have you used this software tool before?";
JLabel textLabel = new JLabel(
"<html><div style=\"text-align: center;\">" + q + "</html>",
SwingConstants.CENTER);
textLabel.setForeground(Color.green);
Font labelFont = new Font("SansSerif", Font.PLAIN, 30);
textLabel.setFont(labelFont);
textLabel.setBorder(new EmptyBorder(75, 0, 0, 0)); // top, left, //
// bottom, right
setBackground(Color.darkGray);
add(textLabel, BorderLayout.NORTH);
JPanel radioPanel = new JPanel(new GridLayout(2, 1, 0, 0));
radioPanel.setOpaque(false);
radioPanel.add(yesButton);
radioPanel.add(noButton);
radioPanel.setBackground(Color.darkGray);
radioPanel.setBorder(new EmptyBorder(50, 200, 125, 0));
add(radioPanel, BorderLayout.CENTER);
JPanel btnPanel = new JPanel();
btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());
btnPanel.add(nextButton);
btnPanel.setBackground(Color.darkGray);
btnPanel.setAlignmentX(RIGHT_ALIGNMENT);
add(btnPanel, BorderLayout.SOUTH);
} // end init
public static void showNextWindow() {
// instead of println - show the next window
System.out.println("go to the next window");
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equalsIgnoreCase(yes)) {
System.out.println("You clicked yes");
isNew = false;
yesButton.setEnabled(false);
noButton.setEnabled(true);
choice = true;
} else if (e.getActionCommand().equalsIgnoreCase(no)) {
System.out.println("You clicked no");
isNew = true;
noButton.setEnabled(false);
yesButton.setEnabled(true);
choice = true;
} else if (e.getActionCommand().equalsIgnoreCase(next)) {
// go to the next window
if (choice == true) {
if (isNew == true) {
System.out.println("REGISTERING.");
} else {
System.out.println("LOGGING.");
}
showNextWindow();
}
}
}
public static void createAndShowGUI() {
JFrame frame = new JFrame("New user?");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new NewUser());
frame.setSize(550, 450);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
第三个:
public class Password extends JPanel implements ActionListener {
static JTextArea passwordField;
JLabel infoLabel;
JLabel infoLabel2;
static String next = "Next";
static String copy = "Copy";
JButton nextButton;
JButton copyButton;
final static int BIG_BORDER = 70;
final static int SMALL_BORDER = 10;
final static int ELEMENTsLENGHT = 370;
final static int VERTICAL_SPACE = 15;
final static int VERTICAL_SPACE_PLUS = 25;
final static int HORIZONTAL_SPACE = 30;
final static int SPACEforELEMENT_LABEL = 80;
final static int SPACEforELEMENT_TEXT = 40;
final static int H_SPACEforBUTTON = 64;
final static int V_SPACEforBUTTON = 26;
public Password() {
init();
}
public void init() {
String text = "This is your temporary password generated by the system:";
String text2 = "Remember:<br>it expires in 30 seconds time.";
JLabel infoLabel = new JLabel(
"<html><div style=\"text-align: center;\">" + text + "</html>",
SwingConstants.CENTER);
JLabel infoLabel2 = new JLabel(
"<html><div style=\"text-align: center;\">" + text2 + "</html>",
SwingConstants.CENTER);
infoLabel.setForeground(Color.green);
infoLabel2.setForeground(Color.green);
Font labelFont = new Font("SansSerif", Font.PLAIN, 24);
infoLabel.setFont(labelFont);
infoLabel2.setFont(labelFont);
passwordField = new JTextArea("password1");
passwordField.setEditable(false);
Font TextfieldFont = new Font("SansSerif", Font.PLAIN, 32);
passwordField.setFont(TextfieldFont);
nextButton = new JButton("NEXT");
nextButton.setActionCommand(next);
nextButton.addActionListener(this);
nextButton.setToolTipText("Click this button to continue.");
copyButton = new JButton("Copy");
copyButton.setActionCommand(copy);
copyButton.addActionListener(this);
copyButton.setToolTipText("Click this button to copy the password.");
JPanel panelButton = new JPanel();
panelButton.add(nextButton);
double size[][] = {
{ BIG_BORDER, ELEMENTsLENGHT, HORIZONTAL_SPACE,
H_SPACEforBUTTON, SMALL_BORDER }, // Columns
{ BIG_BORDER, SPACEforELEMENT_LABEL, VERTICAL_SPACE_PLUS,
SPACEforELEMENT_TEXT, VERTICAL_SPACE_PLUS,
SPACEforELEMENT_LABEL, VERTICAL_SPACE_PLUS,
VERTICAL_SPACE, VERTICAL_SPACE_PLUS,
V_SPACEforBUTTON, SMALL_BORDER } }; // Rows
setLayout(new TableLayout(size));
setBackground(Color.darkGray);
add(infoLabel, "1,1,1,1");
add(passwordField, "1,3,1,1");
add(infoLabel2, "1,5,1,1");
add(copyButton, "3,3,1,1");
add(nextButton, "3,9,1,1");
} // end init()
public static void showNextWindow() {
// instead of println - show the next window
System.out.println("go to the next window");
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equalsIgnoreCase(next)) {
showNextWindow();
}
if (e.getActionCommand().equalsIgnoreCase(copy)) {
passwordField.copy();
System.out.println("copied");
}
}
public static void createAndShowGUI() {
JFrame frame = new JFrame("RandomSystemPassword");
frame.getContentPane().add(new Password());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(550, 450);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
抱歉,对于很多代码,我想您可以用更好的方式编写它,但我只是 Java 的新手...任何帮助将不胜感激。
最佳答案
But I don't know how should I "link" them together.
您需要一个框架包含 3 个面板,而不是 3 个框架每个包含一个面板。框架的内容 Pane 将使用 CardLayout。每个单独的面板都可以使用他们想要的任何布局。
首先阅读 How to Use Card Layout 上的 Swing 教程一个工作的例子。在每个面板上,您的下一个/上一个按钮需要显示应该显示的下一个/上一个面板。
一种方法是在每个按钮的 ActionListener 中对面板名称进行硬编码。
另一种方法是使用 CardLayout 类的 next()/previous() 方法。
编辑:
例如,要使 card1 成为一个单独的源文件,您可以这样做:
// JPanel card1 = new JPanel();
// card1.setName("buttons");
// card1.add(new JButton("Button 1"));
// card1.add(new JButton("Button 2"));
// card1.add(new JButton("Button 3"));
JPanel card1 = new ButtonPanel();
ButtonPane 的源代码类似于:
public class ButtonPanel extends JPanel
{
public ButtonPanel()
{
setName("buttons");
add(new JButton("Button 1"));
add(new JButton("Button 2"));
add(new JButton("Button 3"));
}
}
关于java - GUI - 将 CardLayout 用于一组类似向导的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9305566/
嗨,我正在使用表单做一个小项目。目前我使用了 netbeans,但我的类变得非常复杂,因为所有 jpanel ie 卡都在一个类中,这是一个框架。我被要求简化。 我的问题是如果我把一个 jpanel
是否有一种优雅的方法可以用指向另一个对象的新引用替换添加到 CardLayout 中的对象的引用。我不知道现在我是否想得好,但我只想得到反馈。 最佳答案 而不是 bankAccPanel 直接添加将其
在我的项目中,我在 JFrame 中有一个 JPanel (bottomPanel) 需要交换,因此我在 BottomPanel 上使用 CardLayout。 在我的父 JFrame 中,我基本上在
我想熟悉 CardLayout,所以我正在制作一个模拟游戏菜单。该菜单应该有三个按钮,但布局部分很简单。 所以,我想做的是用带有三个按钮的菜单启动它。单人游戏按钮应该将用户看到的内容更改为单个按钮,这
我是java初学者。在第二个卡片面板中,用户名和密码对齐不正确。有什么办法可以解决吗?我还想知道使用多个框架的缺点是什么。 import java.awt.*; import java
我正在尝试编写一个简短的程序,它有一个带有标题的主页和 4 个按钮,其中 3 个按钮将离开主屏幕并转到一个新页面,您可以在其中相应地输入信息。我开始使用拖放编辑器,但通过论坛发现我应该使用卡片布局,而
这是我的 SSCE(尽管分为三个单独的类(class))。 启动.java public class Startup { public static void main(String args
每当我感觉自己已经学到了很多关于 Java 的知识时,我就会突然遇到一堵砖墙,让我感觉自己像个十足的白痴。今天的大问题是 CardLayout。至少我终于通过在字段列表中实例化 buttonsCard
我正在使用 Eclipse 和 Window Builder。但是我无法在 Window Builder 中使用卡片布局。所以我开始输入自己的代码,现在我卡在显示第一张卡上,该卡显示正确,但在单击 j
有没有办法告诉使用 CardLayout 的 JPanel 在哪里添加组件? 假设我在框架中央有一个这样的面板,并且我想在该面板内显示 3 个组件。这可能吗? 最佳答案 当然,这很容易。只需将 JPa
我在 CardLayout 中放置了一堆面板,其中第 n 面板取决于 (n - 1)th 面板。由于使用 CardLayout,您必须事先初始化并添加所有面板。因此,它使得管理状态变得比必要的更加困难
我制作了一个简单的程序,几乎可以完成所有操作,除了返回到第一个面板的开关之外。因此,如果我单击“Druck”按钮,它将把钱从一个银行帐户转移到另一个银行帐户,然后切换到第二个面板,其中显示两个帐户的余
我正在关注 YouTube 上关于 CardLayout 的教程。我下载了the original code ,效果很好。但对于我试图制作的程序,我需要一个单独的类来运行应用程序(即仅具有 main
我有一个已经运行并可以运行的游戏,我想为其添加一个标题屏幕。我正在尝试添加 CardLayout 以便在游戏和标题屏幕之间轻松切换。我当前的问题是没有显示任何内容。这是一张图片:/image/AooM
我创建了使用多个面板的应用程序,所以我选择了cardLayout。问题是,当执行以下代码时,在 UserInterface 方法 SinglePlayer() 中会发生一些奇怪的事情。我使用命令 fr
我正在为一个相当简单的棋盘游戏制作我的第一个 GUI。除了游戏 View 之外,我还需要主菜单和其他一些 View 。不幸的是,我的 GUI 看起来比早上更难看,因为整个菜单结构都在一个类中。我使用卡
这是我第一次尝试使用 Cardlayout 运行代码。这是 add 方法的异常(空指针)。不过,我也尝试弄清楚如何设计卡片布局,例如卡片并排或一张在下。我更喜欢后者。我已经尝试更改我的代码并阅读有关类
所以我有一个带有 CardLayout 的 JPanel。正如预期的那样,此 CardLayout 管理框架中面板的切换。切换是通过两个按钮完成的:“后退”和“下一步”。 我想知道当它位于最后一张卡上
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我知道这个问题之前已经被问过,但我似乎无法让答案起作用,也不理解它们。 我想做的是交换按钮单击的面板。这是我的主要功能: public class CreateWindow extends JFram
我是一名优秀的程序员,十分优秀!