当有人单击按钮时,如何显示第二个JPanel?该代码给出了一个错误-未知源。我想念什么?
package Com.global;
import java.awt.BorderLayout;
public class Govinda extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JPanel panel;
private JPanel panel_1;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Govinda frame = new Govinda();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Govinda() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new CardLayout(0, 0));
final JPanel panel = new JPanel();
contentPane.add(panel, "name_273212774632866");
panel.setLayout(null);
JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
panel_1.setVisible(true);
panel.setVisible(true);
}
});
btnNewButton.setBounds(126, 105, 89, 23);
panel.add(btnNewButton);
JPanel panel_1 = new JPanel();
contentPane.add(panel_1, "name_273214471684839");
panel_1.setLayout(null);
JLabel lblHaiiiiiiiii = new JLabel("HAIIIIIIIII");
lblHaiiiiiiiii.setBounds(159, 129, 46, 14);
panel_1.add(lblHaiiiiiiiii);
}
}
这个JPanel代码好吗?
并非如此(很抱歉),您应该使用a
CardLayout
来使其正常工作,请参阅如何使用CardLayout。
通过在构造函数中重新声明变量(panel
和panel_1
),您还可以隐藏变量。
您还应该避免使用null
布局,像素完美布局是现代ui设计中的一种幻觉。有太多因素会影响组件的单个大小,您无法控制。Swing旨在与布局经理为核心一起工作,舍弃这些问题不会导致问题和问题的终结,您将花费越来越多的时间来尝试纠正问题
您也永远不会添加panel_1
,contentPane
因此对其进行调用setVisible
(假设变量阴影已修复)将不会执行任何操作
通常也建议不要直接从JFrame
其他顶级容器扩展它,也不要在该类中添加任何新功能,而只能将自己锁定在一个用例中
因此,您可能会做更多类似的事情…
import java.awt.CardLayout;
import java.awt.EventQueue;
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.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new Govinda());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class Govinda extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel panel;
private JPanel panel_1;
/**
* Create the frame.
*/
public Govinda() {
setBorder(new EmptyBorder(5, 5, 5, 5));
setLayout(new CardLayout(0, 0));
JPanel panel = new JPanel();
add(panel, "name_273212774632866");
JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
((CardLayout) getLayout()).show(Govinda.this, "name_273214471684839");
}
});
panel.add(btnNewButton);
JPanel panel_1 = new JPanel();
add(panel_1, "name_273214471684839");
JLabel lblHaiiiiiiiii = new JLabel("HAIIIIIIIII");
panel_1.add(lblHaiiiiiiiii);
}
}
}
您可能还会考虑对导航使用更多的“ 模型-视图-
控制器”
方法,因此用于确定下一个视图的逻辑将由控制器根据模型的要求进行,例如,看看在监听器放置秉承传统(非中介)MVC模式
嘿,我正在做一个java项目,我会试着把我的问题概括出来... 我有一个jpanelX,其中包含juckons1到5。所有这些按钮都连接到相同的actionlistener和相同的操作执行方法。我还将点击的按钮的来源保存到全局字符串变量中。 我有另一个JpanelY。JpanelY包含字符串数组。 我想将这两种行为联系起来: > 用户点击JpanelX上的按钮 显示的是JpanelY而不是Jpan
问题内容: 我正在尝试制作一个通过JToggleButton激活的弹出面板。我希望在选择ToggleButton时将JPanel添加到另一个Jpanel上,而在取消选择ToggleButton时将其隐藏。 我已经声明了JToggleButton并使用了ItemListener。但是发生的事情是,当我选择ToggleButton时,如果我取消选择并再次选择它,则会创建一个面板,然后再次添加另一个JP
我需要帮助创建一个div,当你点击一个按钮时,里面有自定义超文本标记语言的div会被创建。 如果这是可能的(很可能是),我正在制作一个邮箱。 谢谢!!!
按钮点击页面后刷新并重定向到另一个页面。在我的情况下,点击按钮后,我给页面刷新超时,但点击按钮后,它显示超时异常,没有时间等待。 例外: 失败:createEventTest组织。openqa。硒。TimeoutException:等待页面加载时超时。命令持续时间或超时:15.08秒构建信息:版本:“2.53.0”,修订版:“35ae25b1534ae328c771e0856c93e187490c
我的菜单显示向下,但然后水平。 我希望每一个导航项目都显示下来,在彼此的上面。 现场测试站点URL:ministerios-elim.herokuapp.com CodePen:(无法使菜单在单击CodePen时出现)。 https://codepen.io/ogonzales/pen/abnqxlg 更新2: 更新3:
链接到我正在尝试刮取的页面: https://www.nytimes.com/reviews/dining 因为这个页面有一个“show more”按钮,所以我需要Selenium自动反复单击“show more”按钮,然后以某种方式使用Beauty soup来获取页面上每个餐厅评论的链接。在下面的照片中,我想获取的链接位于https://...onigiri.html" 迄今为止的代码: 我如何