rag*_*ull 1 java swing jpanel jframe cardlayout
现在我知道有很多关于这个的问题,我已经阅读了十几个。但我只是撞到了一堵墙,我无法理解它的正面或反面。
这是我的问题。
我有 3 个面板类。
ConfigurePanel.java
ConnectServerPanel.java
RunServerPanel.java
Run Code Online (Sandbox Code Playgroud)
和我的 JFrame 类
StartUPGUI.java
Run Code Online (Sandbox Code Playgroud)
这是在启动时初始化的内容
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))
);
Run Code Online (Sandbox Code Playgroud)
我的 StartUPGUI 首先调用 StartUpPanel。在我的 StartUpPanel.java 我有一个按钮调用 StartUPGUI 中的 setPanel 方法
StartUpGUI s = new StartUpGUI();
String str = "";
if(runserverbtn.isSelected()){
str = "runserver";
}
else if(connectserverbtn.isSelected()){
str = "connectserver";
}
else{
str = "";
}
s.setPanel(str);
Run Code Online (Sandbox Code Playgroud)
这是我的 setPanel 方法
void setPanel(String str){
if(str == "runserver"){
}
else if(str == "connectserver"){
}
else{
}
}
Run Code Online (Sandbox Code Playgroud)
我需要在 if 块中放入什么来更改面板视图?我会假设 jPanel1.something() 但我不知道那是什么。
“我需要在 if 块中放入什么来更改面板视图?我会假设 jPanel1.something() 但我不知道那是什么东西。”
不要将字符串与 比较==,它将不起作用。使用.equals..if("runserver".equals(str)){
您需要使用.show来自CardLayout
CardLayout.show(jPanel1, "whichPanel");
Run Code Online (Sandbox Code Playgroud)
public void show(Container parent, String name)- 使用 addLayoutComponent 翻转到以指定名称添加到此布局的组件。如果不存在这样的组件,则什么也不会发生。
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");
}
}
Run Code Online (Sandbox Code Playgroud)有关更多详细信息,请参阅如何使用 CardLayout,有关更多方法,请参阅API。
更新
尝试运行这个例子并用你的代码检查它,看看你是否注意到任何有用的东西
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);
}
}
Run Code Online (Sandbox Code Playgroud)
更新 2
问题是,按钮在ConfigurePanel类中。试图StartUPGUI在该类中创建一个新的,不会引用相同的组件。您需要做的是将 的引用传递StartUPGUI给ConfigurePanel。像这样的东西
public class ConfigurePanel extends JPanel {
StartUPGUI startup;
public ConfigurePanel(StartUPGUI startup) {
this.startup = startup;
}
....
public void actionPerformed(ActionEvent e) {
startup.setPanel("runserver");
}
}
Run Code Online (Sandbox Code Playgroud)
并ConfigurePanel从StartUPGUI这样实例化
new ConfigurePanel(StartUPGUI.this);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6943 次 |
| 最近记录: |