简单来说,有一个简单的java swing应用程序,它由JFrame和其中的一些组件组成.其中一个组件是JPanel,它意味着在用户操作上被另一个JPanel替换.
那么,做这样事情的正确方法是什么?我试过了
panel = new CustomJPanelWithComponentsOnIt();
parentFrameJPanelBelongsTo.pack();
Run Code Online (Sandbox Code Playgroud)
但这不行.你会建议什么?
前言(这是一个自我答复的帖子)
我已经厌倦了Netbeans GUI Builder,但我只是没有开始深入了解它以了解更复杂的细节.我真的甚至不知道从设计视图更改布局管理器,我只是手工编写它.因此,我尝试通过询问"如何在Netbeans GUI Builder中使用不同的布局管理器"来询问Google服务台,并在结果的前几页中惊奇地发现了zilch.在Eclipse Window Builder中,您可以从调色板中拖放不同的布局管理器,为什么不在GUI Builder中.瞧,经过几个小时的搜索,我从容器组件的上下文菜单中找到了神奇的Set Layout.现在我准备好统治世界了!
我想我会介绍一些关于如何使用GUI Builder中不同布局管理器的教程,这里也是如此,所以其他人不会秃顶撕裂他们的头发试图找出我自己一直在想的东西.在完成第一个教程CardLayout(下面)后,我准备发布我的努力并输入Ask Question页面的标题,"如何使用Netbeans GUI Builder使用CardLayout".什么...... !! .关于这个话题已经有一些问题!! 我想我应该让我的Google查询更精确.DOHH!
无论如何,我现在有了这个教程,它比其他答案中提供的信息更有用,所以我的努力不会浪费(所以我告诉自己:D).也许我会制作一系列这些东西.走着瞧.现在,享受如何使用CardLayout:P
我不知道我应该在哪里解决这个问题,如果这是我的错,那么Picasso Lib Wrong或Cardview Library中就会有一些东西.
基本上我有一个CardView图像(全卡覆盖)和A TextView覆盖.
在Android 5.0设备上运行代码时,一切正常,Image获取其圆角.
但是,如果我在5.0之前的设备上运行它,图像重叠Cardlayout并且没有圆角.
你可以看看这个图片的比较:

以下是一些代码片段:
layout_row.xml
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/pandaImage"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_centerInParent="true"
android:scaleType="centerCrop" />
<TextView
android:id="@+id/pandaName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/pandaImage"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:background="@color/photo_tint"
android:clickable="true"
android:focusable="true"
android:gravity="center"
android:textColor="@android:color/white"
android:textSize="24sp" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
加载图像的Recycler Adapter:
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
Photo p = photos.get(i);
Picasso.with(mContext).load(p.getUrl()).fit().into(viewHolder.mImage);
viewHolder.mPandaName.setText(p.getTitle());
}
Run Code Online (Sandbox Code Playgroud) 嗨,我很抱歉,如果已经发布但我看起来很难找到其他代码,我无法理解.我是java编程的新手,希望有人能指出我如何通过按下按钮更改为所需的面板.任何帮助将受到高度赞赏.我只想完全理解这个概念是如何运作的.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; // Packages used in this program imported
public class onlineGame extends JFrame implements ActionListener
{
JPanel cards;
JButton button1, button2, button3;
public onlineGame() //This is the CONSTRUCTOR method
{
//The entry point into your program
setLayout(new FlowLayout()); //Use this for now.
setSize(810, 510); //Set the size of the JFrame
setTitle("Generic Card Game"); //Put Title on top of JFrame
setBackground(Color.yellow);
setResizable(false);
button1 = new JButton("THIS IS BUTTON 1");
button2 = new JButton("THIS IS BUTTON …Run Code Online (Sandbox Code Playgroud) 我是Android编程的新手,正在开发卡片布局.我想知道,如何让它可点击?
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground"
Run Code Online (Sandbox Code Playgroud)
我在我的卡片小部件上有这个,然后我想知道在哪里点击可点击的动作?我希望能够单击该卡,它获取卡的ID,然后显示新的意图活动
这是我加载适配器的活动的代码
setContentView(R.layout.activity_my);
RecyclerView recList = (RecyclerView) findViewById(R.id.cardList);
recList.setHasFixedSize(true);
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
recList.setLayoutManager(llm);
ContactAdapter ca = new ContactAdapter(createList(30));
recList.setAdapter(ca);
Run Code Online (Sandbox Code Playgroud) 在StackOverflow上有很多次用户问这样的问题......
我有一个
JPanel包含孩子的主人JPanel.当用户单击按钮时,孩子JPanel应该更改为其他JPanel.我怎样才能做到这一点.
通常,用户实际上已尝试实现此问题,但无法使其正常工作.
每当我回答这个问题时,我都会告诉他们做这样的事情(简单地说)......
JPanel myFrame = new JPanel();
myFrame.remove(oldPanel);
myFrame.add(newPanel);
Run Code Online (Sandbox Code Playgroud)
我认为这是一个非常合理的答案,我个人在我自己的许多Java项目中都没有使用过这个问题.但是,我总是得到我的回答,每个人只是说"使用CardLayout".
所以我的问题是,为什么每个人都如此着迷CardLayout,以至于我的答案值得进行投票?为什么我应该CardLayout使用上面的代码选择使用而不是添加/删除面板?
作为进一步的问题,您是否仍然建议CardLayout使用具有动态JPanel的接口.例如,我的大多数程序都实现了一个自定义插件框架,其中可能有数百个JPanels,但我只是加载并显示实际需要的面板.对于程序的正常使用,大多数面板实际上永远不会被加载或需要.对于这种类型的场景,我的编码方法是否是最好的解决方案,据我所知,这CardLayout将需要我实际创建所有的,JPanels即使大多数永远不会被使用?
是否有可能在Java的CardLayout中获得顶级卡?我已经尝试循环遍历每个组件以检查isVisible()的可见性,但似乎它们都是"可见的".
编辑:通过"顶级卡"我的意思是当前处于"顶部"的那个,正在显示,而不是第一张或最后一张牌.另外,我不知道它是否有帮助,但我正在寻找一个JPanel(或其子类)
编辑:代码段
for (Component component : getComponents()) {
if (component instanceof JPanel && component.isVisible()) {
currentPanel = (JPanel) component;
System.out.println(currentPanel.getClass().getName());
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码总是打印出每个组件类的名称,无论它们是否是可见卡.
编辑:我将此作为学校作业的一部分.我不是想在这里获得免费赠品,作业并不围绕这种布局.它似乎是在面板之间切换最方便的布局.我的老师已经指定项目中没有第三方代码.我之前看过camickr链接的实现,但我不能使用它.我可以松散地实现它的类似功能,并可能在文档中提供它,但我不能简单地下载和使用它.
编辑:我试图获得顶级卡的原因是因为我有一个带有"添加"按钮的工具栏.我没有为我的两个可能的东西添加一个按钮,而是希望通过查看当前正在查看的面板来了解要添加的内容.如果还有其他更合适的方法,请告诉我.
编辑:谢谢大家帮忙.我弄清楚问题是什么.我想这是我的错,因为我没有提供足够的细节.我的两张牌是JScrollPanes,我还需要查看其中的内容,看看其中一个面板是否是我看到的那个.我没有检查isVisible()滚动窗格本身,我一直在看它总是可见的竞争,滚动窗格是我需要验证的可见性.
public JPanel getCurrentPanel() {
JPanel currentPanel = null;
for (Component component : getComponents()) {
if (component.isVisible()) {
if (component instanceof JPanel)
currentPanel = (JPanel) component;
else if (component instanceof JScrollPane)
currentPanel = (JPanel) ((JScrollPane) component).getViewport().getComponent(0);
}
}
return currentPanel;
}
Run Code Online (Sandbox Code Playgroud) 我用Google搜索了很多内容,但没有找到解决方案.我想应该有java大师来帮助我...
这是我的初始化方法:
private void initialize() {
this.setSize(750, 480);
this.setContentPane(getJContentPane());
this.setTitle("Registration");
JPanel topPane = new TopPane();
this.getContentPane().add(topPane,BorderLayout.PAGE_START);
cards=new JPanel(new CardLayout());
cards.add(step0(),"step0");
cards.add(step1(),"step1");
cards.add(step2(),"step2");
this.getContentPane().add(cards,BorderLayout.CENTER);
}
public JPanel step2(){
EnumMap<DPFPFingerIndex,DPFPTemplate> template = new EnumMap<DPFPFingerIndex, DPFPTemplate>(DPFPFingerIndex.class);
JPanel enrol = new Enrollment(template,2);
return enrol;
}
public JPanel step0(){
JPanel userAgree = new UserAgreement();
return userAgree;
}
public JPanel step1(){
JPanel userInfo = new UserInformation();
return userInfo;
}
public JPanel getCards(){
return cards;
}
Run Code Online (Sandbox Code Playgroud)
这是另一个步骤0 JPanel的方法:
jButtonAgree.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
Registration …Run Code Online (Sandbox Code Playgroud) 我从中获取了Card View的jar文件
sdk\extras\android\m2repository\com\android\support\cardview-v7\21.0.0-rc1
Run Code Online (Sandbox Code Playgroud)
我能够为Recycler做,但是对于卡片视图,它在xml中用于导入android.support.v7.widget.CardViewXML布局中的错误
而详细的错误是
error: No resource identifier found for attribute 'cardCornerRadius' in package 'com.cards.cardlayoutui'
Run Code Online (Sandbox Code Playgroud)