- html - 我的下拉菜单的内容关闭得太快
- c# - 使用 Html Agility Pack 从网页中的表中获取值而不使用 "SelectNode'
- html - 内容容器下的 CSS 下拉菜单
- html - 如何停止嵌套列表重叠父列表?
我正在使用 swing 尝试制作一个垄断板。我试图将板上的属性/空间制作为单独的 JPanel,它们可以有自己的实现、信息等,但我在空间的形状方面遇到了一些问题。我正在使用 GridBagLayout (我对这个布局管理器相当陌生),并且我正在尝试布置面板,以便对于侧面 JPanels,gridwidth = 4,gridheight = 3(请参阅随附的代码)。然而,当我运行它并查看它时,面板是方形的。我确认当我将 gridheight 更改为 2 或 1 时这不起作用,它仍然显示为正方形(我期望 JPanel 的形状更加椭圆形)。
请原谅命名方案,在我的主垄断程序中实现 gui 之前,我只是在 Eclipse 中的一个单独的临时项目文件中尝试此布局。
import static java.awt.GridBagConstraints.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class MainFrame extends JFrame {
private static final long serialVersionUID = 1L;
public MainFrame() {
super();
setDefaultCloseOperation(EXIT_ON_CLOSE);
Dimension screenSize = getToolkit().getScreenSize();
setSize(screenSize.height, screenSize.height);
setLocationRelativeTo(null);
setLayout(new GridBagLayout());
addCorners();
addEdges();
setVisible(true);
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
System.out.println("Component resized");
int width = getWidth();
int height = getHeight();
System.out.println(width + " " + height);
super.componentResized(e);
}
});
}
private int startingColRow = 4;
private int endingColRow = 28;
private int bigWidth = 4;
private int smallWidth = 3;
private int startingEdge = 0;
private int endingEdge = 31;
private void addEdges() {
addLeftEdge();
addTopEdge();
addBottomEdge();
addRightEdge();
}
private void addCorners() {
addTopLeftCorner();
addBottomLeftCorner();
addTopRightCorner();
addBottomRightCorner();
}
private void addCorner(int anchor, int gridx, int gridy) {
add(getWhiteJPanel(), getGridBagConstraints(anchor, gridx, gridy, bigWidth, bigWidth));
}
private void addBottomRightCorner() {
addCorner(SOUTHEAST, endingEdge, endingEdge);
}
private void addTopRightCorner() {
addCorner(NORTHWEST, endingEdge, startingEdge);
}
private void addBottomLeftCorner() {
addCorner(SOUTHWEST, startingEdge, endingEdge);
}
private void addTopLeftCorner() {
addCorner(NORTHEAST, startingEdge, startingEdge);
}
public void addLeftEdge() {
for (int row = startingColRow; row <= endingColRow; row += smallWidth) {
add(getWhiteJPanel(), getGridBagConstraints(WEST, startingEdge, row, bigWidth, smallWidth));
}
}
public void addRightEdge() {
for (int row = startingColRow; row <= endingColRow; row += smallWidth) {
add(getWhiteJPanel(), getGridBagConstraints(EAST, endingEdge, row, bigWidth, smallWidth));
}
}
public void addBottomEdge() {
for (int col = startingColRow; col <= endingColRow; col += smallWidth) {
add(getWhiteJPanel(), getGridBagConstraints(SOUTH, col, endingEdge, smallWidth, bigWidth));
}
}
public void addTopEdge() {
for (int col = startingColRow; col <= endingColRow; col += smallWidth) {
add(getWhiteJPanel(), getGridBagConstraints(NORTH, col, startingEdge, smallWidth, bigWidth));
}
}
private static JPanel getWhiteJPanel() {
JPanel panel = new JPanel();
panel.setBackground(Color.WHITE);
panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
return panel;
}
private GridBagConstraints getGridBagConstraints(int anchor, int gridx, int gridy, int gridwidth, int gridheight) {
GridBagConstraints c = new GridBagConstraints();
c.fill = VERTICAL;
c.weightx = c.weighty = 1;
c.anchor = anchor;
c.gridx = gridx;
c.gridy = gridy;
c.gridwidth = gridwidth;
c.gridheight = gridheight;
return c;
}
public static void main(String[] args) {
new MainFrame();
}
}
最佳答案
我对你的c.fill = VERTICAL
有点困惑,我假设BOTH
。除此之外,如果窗口是方形的,则棋盘将具有方形区域,如果窗口是椭圆形的,则棋盘将具有椭圆形区域。 Gridwidth 和 gighheight 在这里完全无关。相反,如果您想要其区域与其中一个轴重叠的对象,则可以使用这些。最好将网格包布局视为一个大网格。然后 gridwidth 和 gridheight 告诉布局给定对象应占据多少列或行。但没有什么可说的,列应该和行一样宽。事实上,没有什么可以说行或列具有相同的大小。所以我想说你对 GridBagLayout 的运作方式有一些不正确的想法。
如果您想固定宽高比,您应该为各个 Pane 设置首选尺寸,然后将整个板打包到 ScrollView 中。这将确保所有内容都以首选尺寸显示。不过,不确定滚动对于您的情况是否是一个好主意。如果没有,您可以尝试使用具有某种合适布局的外部容器,这将允许内部容器增长到其首选大小并且不会更大。
关于java - GridBagLayout 不满足椭圆形形状请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665104/
我希望通过具有可以具有不同 x 和 y 值的 vec2 半径将我当前的圆形光变成椭圆形。有没有什么方法可以根据我当前在片段着色器中的代码执行此操作? uniform struct Light { ve
我正在尝试在显示的图像中实现形状。我不知道该怎么做。我尝试的最后一件事是: Container( height: 175, deco
刚开始摆弄 GUI。我希望这个程序绘制矩形/圆形(取决于用户单击的位置),并继续在前一个形状内绘制相同的形状,直到达到用户在文本字段中输入的数量。当我运行它时,它似乎永远无法进入paintCompon
我需要在Python程序中计算两个椭圆相交的数量。我知道在shaply如果两个对象相交,有一个函数返回 true。就像这样: from shapely.geometry import Polygon
不幸的是,我无法为 EditText 作品制作椭圆大小。当文本太长时,甚至可以在文本末尾放置三个点吗?它适用于 TextiView 但不适用于 EditText。有什么想法吗? android:id
谁能帮我从div中剪出这样的一个? 找到了可能的解决方案,但不了解 SVG。也许有人可以帮助我。 HTML: CSS: svg { position: relative; top:
有没有办法省略 NSTextField 的文本内容,而不是截断? 所以代替: The quick brown fox jumped over 它会说: The quick brown fox jump
我有一个线性布局 View ,我已将其背景设置为椭圆形纯色。到目前为止,我的背景是圆圈。现在我想实现相同的效果,即使用可绘制的形状来获得具有 2 种颜色的圆圈。请见附件。 最佳答案 关
我有一个指向 CursorAdapter 的微调器。我用一个特定的 View 设置这个适配器。我想修复微调器的宽度,我尝试了很多东西都没有成功: layout_width="100dp"//强制 KO
我正在尝试使用@ValidateWithMethod 来验证属性。我有两个非常不同的自定义验证。我想将它们放在不同的方法中,以便我可以获得不同的消息。但是,放置两个单独的 @ValidateWithM
我正在为一个学校项目创建一个程序,用户可以使用控制以下尺寸和颜色的按钮创建一个几何形状(应该看起来像一匹马):一个椭圆形、一个圆形、两个矩形和一个字符串(作为图的标题)。为了保存该图,我想要一个包含所
我有一个 UICollectionView,可以显示圆形、椭圆形、矩形等形状。因此,当我单击 Cell 时,我需要在 UIView 上绘制相同的形状,然后我需要移动并调整通过单击 Cell 绘制的 V
上图是我正在尝试创建的,但在处理椭圆形时遇到了一些困难。解释: 菜单栏是一个带有轻微线性渐变(深灰色到透明浅灰色)的 div 公司 Logo 图像具有透明背景,位于菜单栏的“顶部” 椭圆形切口需要与
我是 Android Studio 的新手,目前我正在尝试以编程方式创建随机颜色、笔划宽度和大小的椭圆形(不是实心,只是笔划): long randomSeedm = System.c
开始之前的相关信息:我已经搜索了 stackoverflow,并发现了类似的标题问题,但我不认为它们是我的重复项,因为它们有一个关键的区别,它们似乎有包含引用的对象给自己,造成圈子。我没有那个。 {
我是 OpenCV 的新手,需要了解 OpenCV 检测不同形状(圆形、正方形、矩形、三角形、椭圆形)的 iPhone 摄像头图像的方法。 所以,有人可以指导我正确的方向(引用/文章/任何东西),哪些
我正在尝试在java中编写一个20个板堆栈,使用按键功能堆叠一个新板,并使用鼠标单击功能使各个板一一消失到0。我不明白为什么我的函数不会'他们不会按照我的命令去做工作,请帮忙。 // Declare
我是一名优秀的程序员,十分优秀!