- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我制作了一个简单的程序,几乎可以完成所有操作,除了返回到第一个面板的开关之外。因此,如果我单击“Druck”按钮,它将把钱从一个银行帐户转移到另一个银行帐户,然后切换到第二个面板,其中显示两个帐户的余额,并且在第二个面板上还显示一个按钮,应该注意切换回第一个面板,但单击它时什么也没有发生。还有另外两个类,“Bank”和“Customer”,但我没有粘贴代码,因为我认为没有必要。我的英语不是最好的,所以如果我不清楚,请告诉我!提前致谢!
public class View extends JFrame {
private Container c;
private JPanel oben, unten, firstPanel, secondPanel;
private JLabel kontoInhaber, empfanger, bildBehalter, secondJLabel;
private JTextField jtextKontoinhaber, jtextempfanger, menge;
private JButton button, backButton;
private ImageIcon image;
private CardLayout cl;
public View (Bank bank){
c = getContentPane();
cl = new CardLayout();
oben = new JPanel();
unten = new JPanel();
firstPanel = new JPanel();
secondPanel = new JPanel();
kontoInhaber = new JLabel("Sender");
empfanger = new JLabel("Empfanger");
secondJLabel = new JLabel();
image = new ImageIcon("/Users/jetser/Desktop/ProgramozasKepek/bank.jpg");
bildBehalter = new JLabel(image);
jtextKontoinhaber = new JTextField(10);
jtextempfanger = new JTextField(10);
menge = new JTextField(10);
button = new JButton("Druck");
button.setActionCommand("uberweisen");
backButton = new JButton("Back");
backButton.setActionCommand("back");
//------------HOZZAADNI A DOLGOKAT-------------//
oben.add(bildBehalter);
oben.setBackground(Color.PINK);
unten.setLayout(new GridLayout(3,2));
unten.add(kontoInhaber);
unten.add(jtextKontoinhaber);
unten.add(empfanger);
unten.add(jtextempfanger);
unten.add(button);
unten.add(menge);
unten.setBackground(Color.PINK);
firstPanel.setLayout(new BoxLayout(firstPanel,BoxLayout.Y_AXIS));
firstPanel.add(oben);
firstPanel.add(unten);
secondPanel.add(secondJLabel);
secondPanel.add(backButton);
c.setLayout(cl);
c.add(firstPanel,"1");
c.add(secondPanel,"2");
cl.show(c,"1");
ButtonListener listener = new ButtonListener(bank,jtextKontoinhaber,jtextempfanger,menge,secondJLabel,c);
button.addActionListener(listener);
}}
<小时/>
public class ButtonListener implements ActionListener {
private Bank bank;
private JTextField einhalter, empfanger, geldMenge;
private JLabel secondLabel;
private Container c;
public ButtonListener(Bank bank, JTextField einhalter, JTextField empfanger, JTextField geldMenge, JLabel secondLabel, Container c) {
this.bank = bank;
this.einhalter = einhalter;
this.empfanger = empfanger;
this.geldMenge = geldMenge;
this.secondLabel = secondLabel;
this.c = c;
}
@Override
public void actionPerformed(ActionEvent e) {
CardLayout cl = (CardLayout) (c.getLayout());
if(e.getActionCommand().equals("uberweisen")){
cl.show(c,"2");
for(int i=0; i<bank.getKunden().length; i++){
if(einhalter.getText().equals(bank.getKunden()[i].getName())){
for(int j=0; j<bank.getKunden().length; j++){
if(empfanger.getText().equals(bank.getKunden()[j].getName())){
String geld = geldMenge.getText();
double geldMenge = Double.valueOf(geld);
bank.getKunden()[i].geldUberweisen(geldMenge);
bank.getKunden()[j].geldErhalten(geldMenge);
String output = bank.getKunden()[i].getName() + ": " + bank.getKunden()[i].getKontostand() + "\n" +
bank.getKunden()[j].getName() + ": " + bank.getKunden()[j].getKontostand();
secondLabel.setText(output);
System.out.println(output);
}
}
}
}
}
else if(e.getActionCommand().equals("back")) {
cl.show(c,"1");
}
}}
最佳答案
我重新创建了您的 GUI 并修复了您的 CardLayout
的问题.
以下是我想强调的要点。
您必须始终通过调用 SwingUtilities
来启动 Swing 应用程序。 invokeLater
方法。此方法确保在 Event Dispatch Thread 上创建并执行 Swing 组件。 (美国东部时间)。
我分离了 JFrame
的创建,CardLayout
,FirstPanel
,以及 SecondPanel
在他们自己的类(class)里。这样,我就可以一次专注于 GUI 的一部分。
当我创建FirstPanel
时类中,我按行、列顺序创建了 Swing 组件。我还将与一个 Swing 组件相关的所有方法调用放在一起。这使得测试和调试变得更加容易。
无论如何,这是我运行的代码。您需要添加不重要的 Bank
和Customer
Action 监听器中的信息。
您可以访问JTextField
来自FirstPanel
通过调用CardLayoutPanel
中的适当方法类和 FirstPanel
类(class)。这样,我只需将一个实例传递给 ButtonListener
类。
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class SimpleBankProgram
implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(
new SimpleBankProgram());
}
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
CardLayoutPanel panel =
new CardLayoutPanel();
frame.add(panel.getPanel());
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public class CardLayoutPanel {
private CardLayout cardLayout;
private FirstPanel firstPanel;
private JPanel panel;
private SecondPanel secondPanel;
public CardLayoutPanel() {
createPartControl();
}
private void createPartControl() {
panel = new JPanel();
cardLayout = new CardLayout();
panel.setLayout(cardLayout);
firstPanel = new FirstPanel(this);
panel.add(firstPanel.getPanel(), "1");
secondPanel = new SecondPanel(this);
panel.add(secondPanel.getPanel(), "2");
showFirstPanel();
}
public void showFirstPanel() {
cardLayout.show(panel, "1");
}
public void showSecondPanel() {
cardLayout.show(panel, "2");
}
public JPanel getPanel() {
return panel;
}
public FirstPanel getFirstPanel() {
return firstPanel;
}
public SecondPanel getSecondPanel() {
return secondPanel;
}
}
public class FirstPanel {
private JPanel panel;
private JTextField jtextKontoinhaber;
private JTextField jtextempfanger;
private JTextField menge;
public FirstPanel(CardLayoutPanel
cardLayoutPanel) {
createPartControl(cardLayoutPanel);
}
private void createPartControl(CardLayoutPanel
cardLayoutPanel) {
panel = new JPanel();
panel.setLayout(new BoxLayout(
panel, BoxLayout.Y_AXIS));
JPanel oben = new JPanel();
oben.setBackground(Color.PINK);
// An image goes here
JLabel bildBehalter = new JLabel(" ");
oben.add(bildBehalter);
JPanel unten = new JPanel();
unten.setBackground(Color.PINK);
unten.setLayout(new GridLayout(3,2));
JLabel kontoInhaber = new JLabel("Sender");
unten.add(kontoInhaber);
jtextKontoinhaber = new JTextField(10);
unten.add(jtextKontoinhaber);
JLabel empfanger = new JLabel("Empfanger");
unten.add(empfanger);
jtextempfanger = new JTextField(10);
unten.add(jtextempfanger);
ButtonListener listener =
new ButtonListener(cardLayoutPanel);
JButton button = new JButton("Druck");
button.setActionCommand("uberweisen");
button.addActionListener(listener);
unten.add(button);
menge = new JTextField(10);
unten.add(menge);
panel.add(oben);
panel.add(unten);
}
public JPanel getPanel() {
return panel;
}
public JTextField getJtextKontoinhaber() {
return jtextKontoinhaber;
}
public JTextField getJtextempfanger() {
return jtextempfanger;
}
public JTextField getMenge() {
return menge;
}
}
public class SecondPanel {
private JLabel secondJLabel;
private JPanel panel;
public SecondPanel(CardLayoutPanel
cardLayoutPanel) {
createPartControl(cardLayoutPanel);
}
private void createPartControl(CardLayoutPanel
cardLayoutPanel) {
panel = new JPanel();
secondJLabel = new JLabel(" ");
panel.add(secondJLabel);
ButtonListener listener =
new ButtonListener(cardLayoutPanel);
JButton backButton = new JButton("Back");
backButton.setActionCommand("back");
backButton.addActionListener(listener);
panel.add(backButton);
}
public JPanel getPanel() {
return panel;
}
public void setJLabel(String text) {
secondJLabel.setText(text);
}
}
public class ButtonListener implements ActionListener {
private CardLayoutPanel cardLayoutPanel;
public ButtonListener(CardLayoutPanel
cardLayoutPanel) {
this.cardLayoutPanel = cardLayoutPanel;
}
@Override
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand()
.equals("uberweisen")) {
String output = "Some bank text I "
+ "can't duplicate";
cardLayoutPanel.getSecondPanel()
.setJLabel(output);
cardLayoutPanel.showSecondPanel();
} else if (event.getActionCommand()
.equals("back")) {
cardLayoutPanel.showFirstPanel();
}
}
}
}
关于java - CardLayout - 不会切换回第一个面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61666871/
嗨,我正在使用表单做一个小项目。目前我使用了 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
我是一名优秀的程序员,十分优秀!