Switching between JPanels in a JFrame(在 JFrame 中的 JPanel 之间切换)
问题描述
现在我知道这方面有很多很多问题,我已经阅读了十几个.但是我刚刚撞到了墙,我无法判断它的正面或反面.
Now I know there are many, many questions on this and I've read a dozen. But I've just hit a wall, I can't make heads or tails of it.
这是我的问题.
我有 3 个面板类.
ConfigurePanel.java
ConnectServerPanel.java
RunServerPanel.java
还有我的 JFrame 类
and my JFrame class
StartUPGUI.java
这是在启动时初始化的内容
This is what is initialised at startup
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
startUp = new sjdproject.GUI.ConfigurePanel();
runServer = new sjdproject.GUI.RunServerPanel();
serverConnect = new sjdproject.GUI.ConnectServerPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
jPanel1.setLayout(new java.awt.CardLayout());
jPanel1.add(startUp, "card2");
jPanel1.add(runServer, "card4");
jPanel1.add(serverConnect, "card3");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(27, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 419, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(38, 38, 38))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(27, 27, 27)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 281, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(30, Short.MAX_VALUE))
);
我的 StartUPGUI 首先调用 StartUpPanel.在我的 StartUpPanel.java 中,我有一个按钮,它调用 StartUPGUI 中的 setPanel 方法
My StartUPGUI calls the StartUpPanel first. In my StartUpPanel.java I have a button which calls the setPanel method in StartUPGUI
StartUpGUI s = new StartUpGUI();
String str = "";
if(runserverbtn.isSelected()){
str = "runserver";
}
else if(connectserverbtn.isSelected()){
str = "connectserver";
}
else{
str = "";
}
s.setPanel(str);
这是我的 setPanel 方法
Here is my setPanel method
void setPanel(String str){
if(str == "runserver"){
}
else if(str == "connectserver"){
}
else{
}
}
我需要在 if 块中放入什么来更改面板视图?我会假设 jPanel1.something() 但我不知道那是什么.
What do I need to put inside the if blocks to change panel views? I would have assumed jPanel1.something() but I don't know what that something is.
推荐答案
我需要在 if 块中放入什么来更改面板视图?我会假设 jPanel1.something() 但我不知道那是什么."
"What do I need to put inside the if blocks to change panel views? I would have assumed jPanel1.something() but I don't know what that something is."
不要将字符串与
==
进行比较,它不会起作用.使用.equals
..if("runserver".equals(str)){
Don't compare string with
==
, it will not work. Use.equals
..if("runserver".equals(str)){
您需要使用 CardLayout
CardLayout.show(jPanel1, "whichPanel");
public void show(Container parent, String name)
- 使用 addLayoutComponent 翻转到使用指定名称添加到此布局的组件.如果不存在这样的组件,则不会发生任何事情.public void show(Container parent, String name)
- Flips to the component that was added to this layout with the specified name, using addLayoutComponent. If no such component exists, then nothing happens.void setPanel(String str){ CardLayout layout = (CardLayout)jPanel1.getLayout(); if("runserver".equals(str)){ layout.show(jPanel1, "card4"); }else if("connectserver".equals(str)){ layout.show(jPanel1, "card3"); } else{ layout.show(jPanel1, "card2"); } }
<小时>
请参阅如何使用 CardLayout 了解更多详情,请参阅 API 了解更多方法.
See How to Use CardLayout for more details and see the API for more methods.
更新
尝试运行此示例并使用您的代码检查它,看看您是否发现有任何帮助
Try running this example and examine it with your code to see if you notice anything that will help
import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class TestCardLayout { PanelOne p1 = new PanelOne(); PanelTwo p2 = new PanelTwo(); PanelThree p3 = new PanelThree(); CardLayout layout = new CardLayout(); JPanel cardPanel = new JPanel(layout); public TestCardLayout() { JButton showOne = new JButton("Show One"); JButton showTwo = new JButton("Show Two"); JButton showThree = new JButton("Show Trree"); JPanel buttonsPanel = new JPanel(); buttonsPanel.add(showOne); buttonsPanel.add(showTwo); buttonsPanel.add(showThree); showOne.addActionListener(new ButtonListener()); showTwo.addActionListener(new ButtonListener()); showThree.addActionListener(new ButtonListener()); cardPanel.add(p1, "panel 1"); cardPanel.add(p2, "panel 2"); cardPanel.add(p3, "panel 3"); JFrame frame = new JFrame("Test Card"); frame.add(cardPanel); frame.add(buttonsPanel, BorderLayout.SOUTH); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } private class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if ("Show One".equals(command)) { layout.show(cardPanel, "panel 1"); } else if ("Show Two".equals(command)) { layout.show(cardPanel, "panel 2"); } else { layout.show(cardPanel, "panel 3"); } } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { TestCardLayout testCardLayout = new TestCardLayout(); } }); } } class PanelOne extends JPanel { public PanelOne() { setBackground(Color.GREEN); add(new JLabel("Panel one")); } @Override public Dimension getPreferredSize() { return new Dimension(300, 300); } } class PanelTwo extends JPanel { public PanelTwo() { setBackground(Color.BLUE); add(new JLabel("Panel two")); } @Override public Dimension getPreferredSize() { return new Dimension(300, 300); } } class PanelThree extends JPanel { public PanelThree() { setBackground(Color.YELLOW); add(new JLabel("Panel three")); } @Override public Dimension getPreferredSize() { return new Dimension(300, 300); } }
<小时>
更新 2
问题是,按钮在
ConfigurePanel
类中.尝试在该类中创建新的StartUPGUI
不会引用相同的组件.您需要做的是将StartUPGUI
的引用传递给ConfigurePanel
.像这样的The problem is, the the button is in the
ConfigurePanel
class. Trying to create a newStartUPGUI
in that class, won't reference the same components. What you need to do is pass a reference of theStartUPGUI
to theConfigurePanel
. Something like thispublic class ConfigurePanel extends JPanel { StartUPGUI startup; public ConfigurePanel(StartUPGUI startup) { this.startup = startup; } .... public void actionPerformed(ActionEvent e) { startup.setPanel("runserver"); } }
并像这样从
StartUPGUI
实例化ConfigurePanel
And instantiate
ConfigurePanel
from theStartUPGUI
like thisnew ConfigurePanel(StartUPGUI.this);
这篇关于在 JFrame 中的 JPanel 之间切换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 JFrame 中的 JPanel 之间切换
基础教程推荐
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01