- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
第一次使用 Java swing,我不明白我哪里出了问题。我正在创建一个 JFrame
,然后创建两个 JPanel
添加到其中。每个 JPanel
都添加了一些 JLabels
。 JFrame
和 JPanels
被指定为 FlowLayouts
,这(据我理解)意味着事物只是按照它们添加的顺序显示,并且如果当前行没有空间,则添加到下一行。
这是我的问题:如果我运行当前代码并仅添加第一个面板 (infoPanel
),我会得到如下所示的正确结果: .
但是,如果我尝试添加两个面板,第一个面板会被覆盖,并且第一个面板的 JLabels
不会完全显示(每个面板上应该有比“Na...”更多的内容) ,这只是以“Name”开头的多行字符串的第一部分。我将最小尺寸指定为 100x100,但它们仍然只有几个字符。我尝试将它们设置为 400x400 和其他尺寸,但没有任何效果更改。它看起来像这样:
我的问题是:(1) 我是否对面板进行了错误的操作?带有 FlowLayout
的 JFrame
是否应该无法在不覆盖第一个添加的面板的情况下添加两个面板?(2) 为什么我的完整 JLabels
没有显示?我不明白我哪里出了问题,因为它们被指定为与我的 infoPanel
JPanel
中的 JLabels
完全相同,而不是看起来一样...
感谢任何帮助,我的代码如下:
private void createView()
{
// Create the frame
frame = new JFrame("Shared Resources ");
frame.setSize(850, 750);
frame.setResizable(true);
frame.setLocation(0,0);;
frame.setVisible(true);
// Set the content
Container content = frame.getContentPane();
content.setBackground(Color.WHITE);
// Create our panels
JPanel infoPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
JPanel playerPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
// Empty border template
Border emptyBorder = BorderFactory.createEmptyBorder();
// Shared resources information
// Palace Cards
palaceCards = new JLabel("Player Palace Cards");
/* TODO */
palaceCards.setHorizontalTextPosition(SwingConstants.CENTER);
palaceCards.setVerticalTextPosition(SwingConstants.BOTTOM);
palaceCards.setVerticalAlignment(SwingConstants.BOTTOM);
palaceCards.setBorder(emptyBorder);
palaceCards.setFont(new Font("Charlemagne Std", Font.BOLD, 14));
palaceCards.setPreferredSize(new Dimension(350,25));
palaceCards.setMinimumSize(palaceCards.getPreferredSize());
infoPanel.add(palaceCards);
festivalCards = new JLabel("Festival Cards");
festivalCards.setBorder(emptyBorder);
festivalCards.setPreferredSize(new Dimension(350,25));
festivalCards.setMinimumSize(festivalCards.getPreferredSize());
festivalCards.setFont(new Font("Charlemagne Std", Font.BOLD, 14));
infoPanel.add(festivalCards);
numThreeBlocks = newJLabel("Three Blocks: ");
numThreeBlocks.setText("");
numThreeBlocks.setPreferredSize(new Dimension(350,25));
numThreeBlocks.setHorizontalTextPosition(SwingConstants.CENTER);
numThreeBlocks.setVerticalTextPosition(SwingConstants.BOTTOM);
numThreeBlocks.setVerticalAlignment(SwingConstants.BOTTOM);
numThreeBlocks.setMinimumSize(numThreeBlocks.getPreferredSize());
numThreeBlocks.setFont(new Font("Charlemagne Std", Font.BOLD, 14));
infoPanel.add(numThreeBlocks);
numIrrigationTiles = newJLabel("Irrigation Tiles");
numIrrigationTiles.setPreferredSize(new Dimension(350,25));
numIrrigationTiles.setMinimumSize(numIrrigationTiles.getPreferredSize());
numIrrigationTiles.setFont(new Font("Charlemagne Std", Font.BOLD, 14));
infoPanel.add(numIrrigationTiles);
numTwoPalaceTiles = newJLabel("Two Palace Tiles: ");
numTwoPalaceTiles.setPreferredSize(new Dimension(350,25));
numTwoPalaceTiles.setMinimumSize(numTwoPalaceTiles.getPreferredSize());
numTwoPalaceTiles.setFont(new Font("Charlemagne Std", Font.BOLD, 14));
infoPanel.add(numTwoPalaceTiles);
numFourPalaceTiles = newJLabel("Four Palace Tiles: ");
numFourPalaceTiles.setPreferredSize(new Dimension(350,25));
numFourPalaceTiles.setMinimumSize(numFourPalaceTiles.getPreferredSize());
numFourPalaceTiles.setFont(new Font("Charlemagne Std", Font.BOLD, 14));
infoPanel.add(numFourPalaceTiles);
numSixPalaceTiles = newJLabel("Six Palace Tiles: ");
numSixPalaceTiles.setPreferredSize(new Dimension(350,25));
numSixPalaceTiles.setMinimumSize(numSixPalaceTiles.getPreferredSize());
numSixPalaceTiles.setFont(new Font("Charlemagne Std", Font.BOLD, 14));
infoPanel.add(numSixPalaceTiles);
numEightPalaceTiles = newJLabel("Eight Palace Tiles: ");
numEightPalaceTiles.setPreferredSize(new Dimension(350,25));
numEightPalaceTiles.setMinimumSize(numEightPalaceTiles.getPreferredSize());
numEightPalaceTiles.setFont(new Font("Charlemagne Std", Font.BOLD, 14));
infoPanel.add(numEightPalaceTiles);
numTenPalaceTiles = newJLabel("Ten Palace Tiles: ");
numTenPalaceTiles.setPreferredSize(new Dimension(350,25));
numTenPalaceTiles.setMinimumSize(numTenPalaceTiles.getPreferredSize());
numTenPalaceTiles.setFont(new Font("Charlemagne Std", Font.BOLD, 14));
infoPanel.add(numTenPalaceTiles);
player1 = newJLabel("Player 1");
player1.setMinimumSize(new Dimension(400,400));
player1.setFont(new Font("Charlemagne Std", Font.BOLD, 14));
playerPanel.add(player1);
player2 = newJLabel("PLayer 2");
player2.setMinimumSize(new Dimension(400,400));
player2.setFont(new Font("Charlemagne Std", Font.BOLD, 14));
playerPanel.add(player2);
player3 = newJLabel("Player 3");
player3.setMinimumSize(new Dimension(400,400));
player3.setFont(new Font("Charlemagne Std", Font.BOLD, 14));
playerPanel.add(player3);
player4 = newJLabel("Player 4");
player4.setMinimumSize(new Dimension(100,100));
player4.setFont(new Font("Charlemagne Std", Font.BOLD, 14));
playerPanel.add(player4);
// Add panels
content.add(infoPanel);
content.add(playerPanel);
}
最佳答案
Should the JFrame with a FlowLayout not be able to add both panels without overwriting the first one that was added?
是的,但问题是 JFrame 使用 BorderLayout
(不是 FlowLayout)作为默认布局管理器。如果您未指定约束,组件将添加到 CENTER
,但您只能在 CENTER 中显示一个组件,因此仅显示最后一个组件。因此,如果您想将两个面板添加到框架中,那么您应该使用类似以下内容的内容:
content.add(infoPanel, BorderLayout.CENTER);
content.add(playerPanel, BorderLayout.SOUTH);
FlowLayouts, which (as I understand it) means that things are just displayed in the order they are added and added to the next line if there isn't room for them on the current line.
基本上是正确的,但对于 FlowLayout,首选大小是按单行组件计算的。仅当面板有额外可用空间时,“包裹”组件才会可见。为了演示这一更改,请使用上面的代码:
//content.add(infoPanel, BorderLayout.CENTER);
content.add(infoPanel, BorderLayout.NORTH);
并且您将看不到包装的组件。请参阅Wrap Layout了解更多信息和此问题的解决方案。
关于java - JFrame JLabel 未完全显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23188014/
我正在尝试将 JFrame (bar) 添加到 JFrame (foo),这会强制 bar 在之前关闭foo 可以再次集成。 例如,在我可以再次编写代码之前,必须关闭“About Eclipse”框架
我有一个名为 User 的 JFrame,在其中声明一个名为 id 的变量,并根据某些条件将其设置为特定值。 我需要在称为输出的第二个 JFrame 中使用此变量。 这是我的代码 class Inpu
我有这个问题:我有一个 ArrayList,其中包含一些我想在特定框架中使用的项目,问题是数组列表通过在主类中初始化而变满我的项目。在本类(class)中,我还启动了与其他框架链接的起始框架(登录框架
如何在隐藏一个 Swing 程序的同时将一个 javax.Swing 程序移动到另一个 Swing 程序,以及如何制作可滚动的 JFrame。请帮助我。 最佳答案 在这里你可以找到一个非常good e
所以基本上我有一个 2D 游戏(基本上是过去的仿制品的链接),当你按 e 键时,库存会打开,关闭时会隐藏。问题是,每次我按 e 键时,它都会打开一个包含所有初始值的新库存,我希望它在初始值之后打开一个
我有一个 JFrame(1,主框架),它延续了 JPanel 和 JTable 以及数据。用户可以编辑数据。因此,一个新的 JFrame (2) 打开,用户可以输入新数据。如果他们在第二帧中单击“确定
我有一个新的netbeans“Java应用程序”项目,我试图从主JFrame添加第二个JFrame,用户可以从中加载文件。 所以我有主要的 JFrame main 方法 public static v
我的程序应该在单击按钮时启动第二个 JFrame 并打印一条语句,但它总是启动三个 JFrame 并打印三个语句。我只需要它来打印出一份声明并启动一个 Jframe。这是代码: import java
我目前已经构建了一个使用多个框架的应用程序。但如果我能在 1 帧中使用所有我用过的帧,那就太好了。如下图所示。 因此,如果您按左侧按钮“Speler Overzicht”,它将在右侧面板中向用户显示,
我目前有一个按钮,单击该按钮时,会执行一种方法,该方法创建一个带有加载多个图像的面板的 jframe。如果多次单击此按钮,图像将继续添加到加载到 jframe 上的现有图像上。我应该使用什么代码,以便
为什么无法将JFrame添加到JFrame中?它只是将一个组件添加到容器中。 Java 如何禁止我这样做?是的,我知道这样做没有意义,但我的问题的重点是了解 Swing 机制 - 它在幕后是如何工作的
我创建了一个生成 StartUpWindow 对象的类。其中一个 JButton 组件关闭 JFrame,然后调用一种新类型的框架进行实例化,AdminMainWindow。但是,当 AdminMai
我试图在不显示 JFrame 本身的情况下将 JFrame 渲染为图像(类似于 this 问题所问的内容)。我试过使用这段代码: private static BufferedImage getScr
我正在使用 XFCE 4 桌面的 Debian 8 上编译并运行以下代码。 import javax.swing.JFrame; import javax.swing.JComponent; impo
我有 14 个 JFrame 类和一个 JFrame 类,其中包含一个充当日历的 JTable。我希望当用户从 JTable 日历中选择日期时,更改 14 个 JFrame 类中任何一个文本字段或任何
我有 3 个扩展 JFrame 的对象让我们调用他们 FrameA FrameB FrameC . FrameA是我的主应用程序窗口。来自 FrameA的构造函数如果应用程序未注册我创建 FrameB
我试图简单地创建四个 jtextfields 和一个 jbutton。按下按钮后,我希望输入到 jtextfields 的文本作为参数(p、var、s、f)传递到另一个窗口,该窗口使用给定的参数显示数
这个问题已经有答案了: Close one JFrame without closing another? (2 个回答) 已关闭 6 年前。 我制作了一个程序,其中存在三个jframe。但问题是,当
我正在用 java 构建一个桌面学生管理应用程序。所以我需要关闭当前的 JFRAME,同时另一个 JFRAME 可见(关闭新的 jframe 后,旧的 jframe 应该可见)。你能帮我一下吗? 最佳
我正在开发的应用程序包含一个主 JFrame,用户最终可能会从中打开另一个补充框架。我正在尝试实现应用程序的这种行为,其中一旦主框架最小化,补充框架就会最小化(图标化)。 我正在考虑重写主框架的 se
我是一名优秀的程序员,十分优秀!