有谁知道如何使用NetBeans GUI构建器工具中的卡布局?我想根据JRadioButton选择显示面板,所以我想使用卡片布局来展示它.
在对话框中,如果选中某个组合,则需要显示一组控件,否则显示另一组控件.即我需要2层,我需要在选中/取消选中组合时在它们之间切换.我怎样才能做到这一点?
谢谢
我有一个JFrame包含了一组JPanels在CardLayout.每个JPanel都有不同的大小,我希望JFrame适应当前显示的大小JPanel(JPanel不适应大小JFrame).
我怎样才能做到这一点?
我是一个Java新手...我需要怎么知道到reload一个JPanel?我扩展了JPanel类并创建了一个将cardlayout在Applet中运行的面板.reload/refresh在用户单击button此面板中的a后,我想要此面板.我尝试在按钮中包含revalidate()和repaint()方法(我不太了解的方法)ActionListener但没有发生任何事情.任何人都可以了解如何正确刷新整个面板?
我有以下代码:
package in.res.num.tapb.ui;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
class MainClass extends JPanel {
public MainClass() {
Registration registration = new Registration();
ButtonPanel buttonPanel = new ButtonPanel();
buttonPanel.setRegistration(registration);
buttonPanel.setBorder(BorderFactory.createTitledBorder("Button Panel"));
registration.setBorder(BorderFactory.createTitledBorder("Registration Panel"));
setLayout(new BorderLayout());
add(registration, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH);
}
private static void createAndShowUI() {
JFrame frame = new JFrame("Registration");
frame.getContentPane().add(new MainClass());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new …Run Code Online (Sandbox Code Playgroud) 我查看了使用此代码的代码示例:
cl.show(cardPanel, "" + (currentCard));
Run Code Online (Sandbox Code Playgroud)
但是当我使用时,我show在Eclipse中收到一条消息,它已被弃用,我想知道当我点击按钮时是否还有另一种方法可以显示CardLayout中的不同卡片?下面是我的CardLayout类的代码.如果代码的某些部分是不好的做法,也欢迎提出建议.谢谢!
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class CardLayoutTest extends JFrame implements ActionListener {
// Ref
private JPanel cardPanel, jp1, jp2, buttonPanel;
private JLabel jl1, jl2;
private JButton btn1, btn2;
private CardLayout cardLayout;
// Konstruktor
public CardLayoutTest()
{
setTitle("Test med CardLayout");
setSize(600,400);
cardPanel = new JPanel();
buttonPanel = new JPanel();
cardPanel.setLayout(cardLayout);
jp1 = new JPanel();
jp2 = new JPanel();
jl1 = new JLabel("Card 1");
jl2 = new JLabel("Card 2");
jp1.add(jl1); …Run Code Online (Sandbox Code Playgroud) 我的程序包含3个主要"部分".主要功能,登录表格和App表格.主要功能应该是这样的:打开登录表单,等待它关闭,然后打开App表单.我不能让等待的部分工作,或者更确切地说,我不知道如何去做这件事.
有人告诉我使用JDialog代替并使用setModal(true),但是使用这种方法,登录表单不会出现在任务栏上,这在我看来很糟糕.
我考虑的另一件事是在关闭后从Login内部打开应用程序,但这感觉就像糟糕的设计,因为这会使登录表单不可重用.
那么,拜托,你会建议什么?
当我创建我的GUI时,我使用cardlayout来保存我的不同面板,因为我相信很多人都知道.这会将我的屏幕设置为我最大面板的宽度和高度.这使我第一次到屏幕的美观,这是远小于问题SudokuPanel和CalkuroPanel.
当我换到更大的屏幕时,我尝试设置首选大小,但无济于事.
任何帮助链接到良好的信息或任何通常只会帮助的人将非常感激:).
请在下面找到我的主要课程(我在哪里画GUI):
import java.awt.*; import javax.swing.*; import java.util.*;
public class puzzleGUI{
private static JPanel screens;
public static String username;
static public void main (String[] args){
JFrame puzzle = new JFrame ("Sudoku/Calkuro Pro");
...
PuzzleStartPanel startPanel = new PuzzleStartPanel();
PuzzleChoosePanel choosePanel = new PuzzleChoosePanel();
PuzzleSudokuPanel sudokuPanel = new PuzzleSudokuPanel();
PuzzleCalkuroPanel calkuroPanel = new PuzzleCalkuroPanel();
screens = new JPanel(new CardLayout());
screens.add(startPanel, "start");
screens.add(choosePanel, "choosePuzzle");
screens.add(sudokuPanel, "sudoku");
screens.add(calkuroPanel, "calkuro");
screens.setPreferredSize (new Dimension(250, 80));
puzzle.setJMenuBar(menuBar);
puzzle.getContentPane().add(screens);
puzzle.pack();
puzzle.setVisible(true); …Run Code Online (Sandbox Code Playgroud) 好吧,我CardLayout在每张卡上使用不同尺寸的卡片时遇到了一些麻烦。
阅读了《使用多个JFrame:好还是不好的做法》之后?我注意到我做事的方式不恰当,所以我决定开始学习如何使用CardLayout
我已经尝试过@HovercraftFullOfEels的答案
这一次从@mKorbel
最后是@Kleopatra 的答案
所有这些都是基于气垫船的答案,但有一些变化。我能够创建CardLayout(并且对此仍然感到困惑),并且我(以某种方式)可以实现Kleopatra的方法,它可以调整框架的大小,但不能如愿,在复制和粘贴代码时,您会注意到它减小了框架的大小。大小仅为几毫米(或像素)。
我不确定这是关于我正在使用的布局管理器,还是因为我没有以正确的方式使用Kleopatra的方法,因为我也不知道@Override方法的工作原理或何时使用它什么时候没有
这是MCVE(我能做的最短的)。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
public class PageViewer extends CardLayout{
private static final String loginCard = "login";
private static final String userCard = "createUser";
JFrame frame;
JPanel contentPane;
CardLayout cardLayout;
@Override
public Dimension preferredLayoutSize(Container parent) {
Component current = findCurrentComponent(parent);
if (current != null) {
Insets insets = parent.getInsets();
Dimension pref = current.getPreferredSize();
pref.width …Run Code Online (Sandbox Code Playgroud) 我想通过单击 JPanel 上的按钮在 JPanel 之间切换。
例如:我有一个带有 JButton simknop 的 JPanel sim 和带有 JButton helpknop 的 JPanel 帮助我想通过单击按钮在这两个 JPanel 之间切换。当我点击 JButton simknop JPanel 帮助应该出现,当我点击 JButton 帮助 JPanel sim 应该出现。
您可以在下面找到不同的类:
public class main extends JFrame
{
JPanel cards;
sim sim;
help help;
public main()
{
this.setSize(1024,768);
//this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Crazy Bombardement");
this.setLocation(800, 100);//standaard in de hoek van het scherm
cards = new JPanel();
cards.setLayout(new CardLayout());
sim = new sim();
help = new help();
cards.add(sim, "SIM");
cards.add(help, "HELP");
this.add(cards);
this.setVisible(true); …Run Code Online (Sandbox Code Playgroud) cardlayout ×10
java ×10
swing ×10
jframe ×2
jpanel ×2
awt ×1
gui-editor ×1
jdialog ×1
layout ×1
netbeans ×1
panel ×1
repaint ×1
validation ×1